¿Cómo uso un reemplazo de nueva línea en un BSD sed?

Saludos, ¿cómo hago lo siguiente en BSD sed?

sed 's/ /\n/g' 

Desde la página de manual, indica que \ n será tratado literalmente dentro de una cadena de reemplazo, ¿cómo puedo evitar este comportamiento? ¿Hay un alterno?

Estoy usando Mac OS Snow Leopard, puedo instalar fink para obtener GNU sed.

En un shell, puedes hacer:

  sed 's/ /\ /g' 

presionando la tecla Intro después de la barra invertida para insertar una nueva línea.

De otra manera:

 sed -e 's/ /\'$'\n/g' 

Mira aquí .

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.

Para ampliar la respuesta de @sikmir: en Bash, que es el intérprete de comandos 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 interpretar. Bash lo traducirá automáticamente por ti.

Por ejemplo, eliminé todos los retornos de carro de MS-DOS de todos los archivos fuente 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 hace daño.

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 la cadena completa, y se ocupará de todas las secuencias de escape en toda la cadena.

 $ echo $'hello\b\\world' hell\world 
    Intereting Posts