如何从一行中删除括号?

如何从一行中删除括号?

给出这样的一行:"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"

相关内容