1 votes

sed suppression des espaces blancs

Je trouve que sed ne parvient pas toujours à vérifier les espaces blancs. Considérez les exemples suivants :

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

Quelqu'un pourrait-il expliquer pourquoi sed ne correspond pas toujours aux espaces blancs ?

3voto

RedGrittyBrick Points 78148

1.

echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A       B       C

Cela fonctionne pour moi

$ echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
ABC

Essayez ceci

$ echo -e 'a\tb' | sed -e 's/[ \t]//'
ab

2.

perl -e 'print "A     B     C\n"' | sed 's/^[ \t]*//g'
A       B       C

votre chaîne ne contient pas d'espace au début ( ^ ) de la ligne

1voto

Damian Powell Points 315

Certaines versions de sed ne soutiennent pas \t et d'autres échappatoires sur le côté gauche d'une commande de substitution.

Vous pouvez trouver des informations sur les variations entre les versions de sed en el FAQ .

0voto

Peter Points 1

La deuxième déclaration que vous avez ci-dessus fonctionne sur ma machine (Ubuntu 10.10 amd64, sed ver 4.2.1, sed package version 4.2.1-7) et je n'ai pas vraiment d'explication quant à la raison pour laquelle celle-là ne fonctionnerait pas.

La troisième et la quatrième sont dues au fait que vous utilisez l'ancre de début de ligne (^). uniquement enlève les espaces en tête et dans votre texte d'entrée, vous n'avez pas d'espace au début des lignes.

0voto

Mani Points 1

Vous devez utiliser \s pour correspondre à la fois aux espaces et aux tabulations :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X