sed 刪除行中的特殊字元和空格

sed 刪除行中的特殊字元和空格

輸入

[*] 111, 22, 33, 44

輸出

111,22,33,44

使用sed命令sed 's/^\[\*\][[:space:]]*//' file能夠顯示輸出,111, 22, 33, 44這意味著空間仍然存在。

那麼正確的命令是什麼呢sed

答案1

簡短的答案是,這應該要做你想要的:

sed 's/[][*]\|[[:space:]]//g'

像這樣測試一下:

echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'

輸出:

111,22,33,44

下面是更長的解釋。


你的表達缺少的關鍵要素是使用g命令執行全域替換。如果沒有此命令,則只會取代每行的第一個符合項目。

我的解決方案中最違反直覺的一點(在我看來)是如何將方括號包含在字元類別中。為此,我們參考sed手冊

‘]’
    ends the bracket expression if it’s not the first list item.
    So, if you want to make the ‘]’ character a list item, you must put it first.

有關該主題的進一步討論,請參閱以下有關 SeverFault 的帖子:

或者,您可以將表達式傳遞到另一個sed命令中,例如:

echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'

相關內容