regex - ¿Cómo uso un reemplazo de nueva línea en un BSD sed?
Saludos, ¿cómo realizo lo siguiente en BSD sed?
sed ''s/ //n/g''
Desde la página del manual, se establece que / n se tratará literalmente dentro de una cadena de reemplazo, ¿cómo evito este comportamiento? ¿Hay alguna alternativa?
Estoy usando Mac OS Snow Leopard, puedo instalar fink para obtener GNU sed.
En una concha, puedes hacer:
sed ''s/ //
/g''
presionando la tecla enter después de la barra invertida para insertar una nueva línea.
Para expandir la respuesta de @ sikmir: En Bash, que es el shell predeterminado en Mac OS X, todo lo que necesita hacer es colocar un carácter $
delante de la cadena entre comillas que contiene la secuencia de escape que desea que se interprete. Bash lo traducirá automáticamente para ti.
Por ejemplo, quité todos los retornos de carro de MS-DOS de todos los archivos de origen en lib/
e include/
escribiendo:
grep -lr $''/r'' lib include | xargs sed -i -e $''s//r//''
find . -name ''*-e'' -delete
BSD grep
habría interpretado ''/r''
correctamente por sí mismo, pero usar $''/r''
no duele.
BSD sed
habría malinterpretado ''s//r//''
por sí mismo, pero al usar $''s//r//''
, evité esa trampa.
Tenga en cuenta que podemos poner $
delante de toda la cadena, y se hará cargo de todas las secuencias de escape en toda la cadena.
$ echo $''hello/b//world''
hell/world
Para facilidad de uso, personalmente uso a menudo
cr="/n"
# or (depending version and OS)
cr="
"
sed "s/ ///${cr}/g"
por lo que se queda en 1 línea.