¿Hay algún problema con sed y el carácter de nueva línea?
Tengo un archivo test.txt con los siguientes contenidos
aaaaa
bbbbb
ccccc
ddddd
Lo siguiente no funciona:sed -r -i 's/n/,/g' test.txt
Sé que puedo usar tr
para esto, pero mi pregunta es por qué parece que no es posible con sed.
Si este es un efecto secundario de procesar el archivo línea por línea, me interesaría saber por qué sucede esto. Creo que grep
elimina nuevas líneas. ¿Sed hace lo mismo?
Respuesta aceptada:
Con GNU sed
y proporcionó POSIXLY_CORRECT
no está en el entorno (para entrada de una sola línea):
sed -i ':a;N;$!ba;s/n/,/g' test.txt
De https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n :
- crear una etiqueta a través de
:a
- añade la línea actual y la siguiente al espacio del patrón a través de
N
- si estamos antes de la última línea, bifurcar a la etiqueta creada
$!ba
($!
significa no hacerlo en la última línea (ya que debería haber una nueva línea final)). - finalmente, la sustitución reemplaza cada nueva línea con una coma en el espacio del patrón (que es el archivo completo).