Por supuesto, sed y awk pueden hacer esto, pero tengo algunos problemas para entender exactamente cuál es su pregunta. ¿Qué es exactamente lo que te está causando problemas? Insertar nuevas líneas? Sustituirlos?
frabjous
Respuestas:
19
Sed es bastante malo en esto, porque opera una línea a la vez. La única técnica decente que he visto hacer esto es esta , que implica almacenar todo el archivo en el búfer de retención de sed y luego operarlo todo de una vez:
sed -n '1h;1!H;${g;s/search/replace/;p;}'
Si puede, es mucho más fácil usar perl para lograr esto:
perl -0pe's/search/replace/'
searchpuede contener \ns para representar nuevas líneas
¿Puedes explicar qué hace la línea de comando para hacer perl?
Michael
1
@Michael -0establece el separador de registros en nulo, por lo que todo el archivo se leerá a la vez en lugar de línea por línea. -phace que imprima el resultado después de la sustitución. -etiene que tomar el siguiente argumento como la expresión para ejecutar, y s/search/replace/es esa expresión
Respuestas:
Sed es bastante malo en esto, porque opera una línea a la vez. La única técnica decente que he visto hacer esto es esta , que implica almacenar todo el archivo en el búfer de retención de sed y luego operarlo todo de una vez:
Si puede, es mucho más fácil usar perl para lograr esto:
search
puede contener\n
s para representar nuevas líneasfuente
sed
multiliner.-0
establece el separador de registros en nulo, por lo que todo el archivo se leerá a la vez en lugar de línea por línea.-p
hace que imprima el resultado después de la sustitución.-e
tiene que tomar el siguiente argumento como la expresión para ejecutar, ys/search/replace/
es esa expresión