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 版本 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

相關內容