GNU/Linux >> Tutoriales Linux >  >> Linux

Sed ¿Eliminar caracteres de la nueva línea?

Después de un poco de procesamiento, tengo mi archivo de entrada como se muestra a continuación.

archivo1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

Necesito seguir procesando el archivo anterior, por lo que también necesito un interruptor de línea al final de la línea. Actualmente, puedo lograrlo de la siguiente manera.

sed 's/$/|/' file1.txt

El comando anterior da como resultado la salida como,

12345|john|student|
43321|jack|professor|
|
78965|alex|lecturer|

Como podemos ver, el | se añade a las líneas en blanco también. Cuando traté de eliminar el | carácter nuevamente desde líneas en blanco usando el siguiente comando,

sed 's/|//g' file1.txt

El | el personaje se está borrando en todas partes. ¿Cómo puedo eliminar solo el |? en líneas en blanco? Necesito mantener la línea en blanco también.

Respuesta aceptada:

Desde su original, puede agregar | a líneas que no están en blanco:

Usando sed :

sed -e '/^$/!s/$/|/' file

Usando perl :

perl -lpe 's/$/|/ if length' file

Si desea eliminar | de líneas que están en blanco (en la segunda versión):

perl -lpe 's/|// if length == 1'

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

  2. ¿Eliminar eficientemente el primer par de líneas de un archivo de texto?

  3. ¿Cómo eliminar una sola línea del historial?

  4. Eliminación de líneas específicas de un archivo en la línea de comandos de Linux

  5. ¿Cómo abrir una nueva pestaña en GNOME Terminal desde la línea de comando?

Eliminar directorio en Linux:cómo eliminar una carpeta desde la línea de comandos

Cómo quitar líneas de un archivo usando el comando Sed

Cómo quitar (^M) caracteres de un archivo en Linux

Cómo quitar todos los caracteres de espacio en blanco de un archivo de texto

Eliminar líneas pares o impares de un archivo de texto

cómo insertar una nueva línea si una línea tiene más de 60 caracteres