Encuentro que sed
a menudo no se logra hacer coincidir el patrón de espacios en blanco. Considere los siguientes ejemplos:
echo 'A B C' | sed 's/[ \t]*//g'
ABC
echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A B C
perl -e 'print "A B C\n"' | sed 's/[ \t]*//g'
ABC
perl -e 'print "A\tB\tC\n"' | sed 's/[ \t]*//g'
A B C
¿Alguien podría explicar por qué sed
a veces no coincide con los espacios en blanco?
Respuesta1
1.
echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A B C
Funciona para mi
$ echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
ABC
Prueba esto
$ echo -e 'a\tb' | sed -e 's/[ \t]//'
ab
2.
perl -e 'print "A B C\n"' | sed 's/^[ \t]*//g'
A B C
su cadena no contiene un espacio al inicio ( ^
) de la línea
Respuesta2
Algunas versiones de sed
no son compatibles \t
y otras se escapan en el lado izquierdo de un comando de sustitución.
Puede encontrar información sobre las variaciones entre las versiones de sed
en elPreguntas más frecuentes.
Respuesta3
La segunda declaración que tiene arriba funciona en mi máquina (Ubuntu 10.10 amd64, sed versión 4.2.1, paquete sed versión 4.2.1-7) y realmente no tengo una explicación de por qué esa no funcionaría.
El tercero y el cuarto se deben a que estás usando el ancla de inicio de línea (^), por lo que seríasoloelimine el espacio en blanco inicial y en el texto de entrada, no tendrá ningún espacio en blanco al principio de las líneas.
Respuesta4
Deberías usar\spara que coincida tanto con espacios en blanco como con tabulación:
echo 'A B C' | sed 's/\s//g'
ABC
echo -e 'A\tB\tC' | sed 's/\s//g'
ABC
perl -e 'print "A B C\n"' | sed 's/\s//g'
ABC
perl -e 'print "A\tB\tC\n"' | sed 's/\s//g'
ABC