
輸入
[*] 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'