给出这样的一行:"hello my (name) is (user)
,我怎样才能删除所有'()'
使用sed?
我目前正在做的是使用 visual block 突出显示该行,然后:s/(//g
再次进行)
。有没有办法(, )
一次性删除两者sed命令?
我的最终目标是"hello my name is user"
答案1
你tr -d '()' <infile
也可以使用。
答案2
您可以使用字符类[()]
作为正则表达式模式,并用空字符串替换模式以删除它们:
sed 's/[()]//g'
所以:
% sed 's/[()]//g' <<<"hello my (name) is (user)"
hello my name is user
g
修饰符对所有匹配执行操作,否则sed
将在第一个匹配后停止。
答案3
您可以将括号内容保存在一个组中并用以下方式替换:
sed 's/(\([^)]*\))/\1/g'
这会保存组 1 中括号内的所有内容([^)]*
只是匹配除 之外的所有内容)
),并用它替换整个括号。g
全局执行此操作意味着对行中的每对括号都执行此操作。
使用示例
$ echo '"hello my (name) is (user)"' | sed 's/(\([^)]*\))/\1/g'
"hello my name is user"