es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo buscar una cadena específica en un archivo hasta una línea en blanco y pegarla en la primera línea de otro archivo?

He intentado

sed -n '/- name: string/,/^$/p' dire1/main.yml >> dire2/README.md

Esto no agrega nada, también quiero agregarlo a la primera línea de dire2/readme.md si readme.md aún no incluye - name: string en la primera línea para no obtener duplicados.

Por ejemplo, si un archivo incluye

- name: primer paso
  uses: mensaje

Quiero que se incluya en la primera línea del readme.md. Pero si readme.md ya tiene esto en la primera línea, no se debe agregar.

Otro ejemplo

El archivo es un archivo más largo.

name: build
otra línea aquí
otra línea más
- name: título aquí
otra línea
otra línea
- name: otro título
más líneas aquí
más líneas 
- name: tercer título
más líneas
más líneas

En este ejemplo, quiero que se llene el archivo readme.md con

name: título aquí
otra línea
otra línea

o cualquiera de los otros párrafos que comiencen con - name y terminen en una línea en blanco.

Todo esto debe buscarse desde un solo archivo y agregarse al comienzo del archivo readme si aún no existe.

Gracias por cualquier ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, primero debemos verificar si el patrón - name: string existe en la primera línea del archivo README.md. Si no existe, entonces necesitamos extraer la primera aparición del patrón - name: string seguido de cualquier línea hasta la siguiente línea en blanco del archivo dire1/main.yml usando el comando sed proporcionado. Finalmente, necesitamos agregar el contenido extraído a la primera línea del archivo README.md.

    Podemos usar el siguiente script de bash para lograr esto:

    #!/bin/bash
    
    # verificar si el patrón existe en la primera línea de README.md
    if grep -q "^- name: string" dire2/README.md; then
      echo "El patrón ya existe en README.md"
    else
      # extraer el contenido y agregarlo a README.md
      sed -n '/- name: string/,/^$/p' dire1/main.yml | sed -e '1s/^/- /' >> dire2/README.md
    fi
    

    Aquí, el comando grep con la opción -q verifica si el patrón - name: string existe en la primera línea del archivo README.md. Si lo hace, entonces no imprime nada y devuelve un estado de salida de 0 (éxito), que podemos utilizar en la condición if.

    Si el patrón no existe, entonces usamos el comando sed proporcionado para extraer el contenido del archivo dire1/main.yml y transformar la primera línea agregando un carácter -. Finalmente, el contenido extraído se agrega a la primera línea del archivo README.md usando el operador >>.

    Tenga en cuenta que debe reemplazar string con el nombre real del patrón que está buscando en su archivo.

Comments are closed.