Reemplazo de múltiples líneas en sed o awk [cerrado]

9

Estoy tratando de usar sed o awk para reemplazar 5 líneas en un archivo smb pero simplemente no tengo idea de cómo lidiar con las nuevas líneas.

glisignoli
fuente
66
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

Michael Mrozek
fuente
1
+1 para el sedmultiliner.
Lazer
¿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
Michael Mrozek