GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puede Sed reemplazar los caracteres de nueva línea?

¿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 :

  1. crear una etiqueta a través de :a
  2. añade la línea actual y la siguiente al espacio del patrón a través de N
  3. 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)).
  4. finalmente, la sustitución reemplaza cada nueva línea con una coma en el espacio del patrón (que es el archivo completo).

Linux
  1. Uso de Sed para buscar y reemplazar una línea entre rangos de patrones

  2. ¿Cómo usar Sed o Ex para reemplazar un bloque (código de varias líneas) con un nuevo bloque de texto (código)?

  3. ¿Reemplazar rango de líneas con rango de líneas (sed u otros)?

  4. Sed ¿Eliminar caracteres de la nueva línea?

  5. ¿Sed On Osx Insert en cierta línea?

Los 20 mejores comandos sed para usar

¿Cómo reemplazar una cadena en un archivo (s)?

¿Cómo usar Sed para reemplazar una cadena de varias líneas?

Tutorial de Unix Sed:anexar, insertar, reemplazar y contar líneas de archivos

reemplazar la enésima ocurrencia de cadena en cada línea de un archivo de texto

¿Cómo reemplazar recursivamente los caracteres con sed?