sed 删除空格

sed 删除空格

我发现这sed经常无法匹配空格。请考虑以下示例:

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

有人可以解释一下为什么sed有时无法匹配空格吗?

答案1

1.

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

对我有用

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

尝试这个

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

2.

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

^您的字符串在行首 ( ) 处不包含空格

答案2

某些版本sed不支持\t替换命令左侧的一些其他转义。

sed您可以在以下位置找到有关版本间差异的信息常问问题

答案3

上面的第二条语句在我的计算机上运行(Ubuntu 10.10 amd64,sed ver 4.2.1,sed 包版本 4.2.1-7),我真的无法解释为什么这个语句不起作用。

第三和第四个是因为你使用了行首锚点(^),所以它会仅有的删除前导空格,在输入文本中,行首没有任何空格。

答案4

你应该使用\s匹配空格和制表符:

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

相关内容