Sed para eliminar espacios en blanco

28

¿Alguien sabe cómo usar Sed para eliminar todos los espacios en blanco en un archivo de texto? No he estado tratando de usar el comando de eliminación "d" para hacerlo, pero parece que no puedo entenderlo

Justin
fuente

Respuestas:

35

¿Qué tipo de "espacio"?

"Eliminar todos los espacios en blanco" puede significar una de las siguientes cosas:

  1. Eliminar todas las apariciones del carácter de espacio, código 0x20.
  2. eliminar todo el espacio horizontal, incluido el carácter de tabulación horizontal, " \t"
  3. eliminar todos los espacios en blanco, incluida la nueva línea, " \n" y otros

La herramienta adecuada para el trabajo.

Si sedno es un requisito por alguna razón oculta, mejor use la herramienta adecuada para el trabajo.

El comando trtiene el uso principal en la traducción (de ahí el nombre "tr") de una lista de caracteres a una lista de otros caracteres. Como caso de esquina, puede traducirse a la lista vacía de caracteres; La opción -d( --delete) eliminará los caracteres que aparecen en la lista.

La lista de caracteres puede utilizar clases de caracteres en la [:...:]sintaxis.

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Al insistir en sed

Con sed, la [:...:]sintaxis para las clases de caracteres debe combinarse con la sintaxis para los conjuntos de caracteres en expresiones regulares [...], lo que resulta en algo confuso [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt
Volker Siegel
fuente
1
+1, la notación POSIX para un espacio en blanco es la forma correcta de hacerlo.
Avinash Raj
1
Gran sugerencia para usar tr para esta tarea, funciona muy bien. Lo único que tuve que ajustar fue que tr lee la entrada de stdin, así que lo que funcionó para mí fue tr -d ' ' < input.txt > no-spaces.txt.
Sky
El comentario de @ Sky funciona en mi macOS (no probado en Linux). ¿Quizás la respuesta debería actualizarse?
iplus26
Muchas gracias @Sky, de hecho es un mal error. Arreglaré las tres líneas con trahora. (¿Lo ves en otro lugar?)
Volker Siegel
7

Puede usar esto para eliminar todos los espacios en blanco en file:

 sed -i "s/ //g" file
Ciro
fuente
2
No dados. También probé un enfoque similar. No funciona
Justin
¿Desea eliminar espacios en blanco o pestañas?
Cyrus
1
eliminar el espacio en blanco
Justin
2
Una prueba simple:man sed | sed "s/ //g"
Cyrus
1
@starscream_disco_party: es lo mismo. Puede reemplazar los 3 /con un personaje diferente, por ejemplo:sed "ss ssg"
Cyrus