Cómo buscar '/>' con sed

Cómo buscar '/>' con sed

Mi necesidad es agregar una nueva cadena después de la primera />para todos los archivos en un directorio.

Aquí está mi guión:

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

Sin embargo, parece que todos \ncoinciden también. Por ejemplo si un archivo es así:

abc
def
<abc/>
<abc/>

Después de ejecutar mi script, obtendré el resultado como se muestra a continuación:

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

Agrega la nueva cadena para la primera aparición de />, pero también agrega la nueva cadena para cada línea antes de la primera />.

Respuesta1

Sí. La expresión 0,/regex/hará que el comando que le sigue ( a) se aplique atodas las lineashasta (e incluyendo) la primera coincidencia de la expresión regular.

Mi conjetura es que tú, en cambio, querrías hacer

sed -i '0,/regex/{//a text
}' "$myfile"

Esto seleccionará todas las líneas hasta la primera coincidencia de la expresión regular y luego aplicará el comando solo en la línea dentro de ese rango que coincida con la expresión, mientras pasa todas las demás líneas sin cambios.

La nueva línea literal es necesaria para señalar el final del texto que agrega.

información relacionada