Soy nuevo en el uso de sed, pero he estado experimentando sed s/..../..../
(sustituto) para modificar una oración completa si está en una línea, pero no conozco una solución alternativa sobre cómo modificar una oración que puede haberse separado en dos líneas como:
Esta:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
en realidad se escribe así:
Lorem Ipsum is simply dummy text of the
printing and typesetting industry.
¿Cómo puede detectar esto o codificarlo para reemplazar la oración completa, incluso si está en dos líneas en lugar de una?
command-line
sed
DᴀʀᴛʜVᴀᴅᴇʀ
fuente
fuente
Respuestas:
El siguiente comando funcionará en ambas situaciones:
Más explicaciones: ¿Cómo puedo usar sed para reemplazar una cadena de varias líneas?
fuente
sed
, nada más. Y esta es la pregunta del título. El título no se trataperl
.Lorem
está en la última línea, un defecto que comparte con su versión.)Si bien sed puede hacer coincidir patrones en varias líneas (usando los comandos
N
oH
para agregar líneas sucesivas antes de hacer coincidir), esto está muy fuera de su zona de confort. Intenta hacerlo solo si te gusta el dolor.Perl puede hacer este tipo de cosas muy bien. Use el
-p
interruptor para que procese la entrada estándar de un registro a la vez e imprima el registro modificado (al estilo sed), y-000
active el modo de párrafo (donde los registros están separados por líneas en blanco). En una expresión regular,\s
coincide con cualquier carácter de espacio en blanco, incluida una nueva línea.Si desea poner una nueva línea en el texto de reemplazo cuando el original contiene una, eso es más complicado. Cómo hacerlo depende de sus requisitos en cuanto a dónde colocar la nueva línea.
fuente
sed
. También está etiquetado consed
, no conperl
.sed no puede leer fácilmente en varias líneas. Usar en su
perl -i -0pe 's/.../.../...'
lugar.fuente
perl
es más simple para usted, esto no significa quesed
rara vez valga la pena.