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