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

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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.