文本处理如何从一行中删除封闭括号?

分享于 

2分钟阅读

ubuntu

 

问题:

给出这样一条直线: "hello my (name) is (user) 如何使用 sed 删除所有 '()'

我目前正在使用可视块突出显示行,然后使用 :s/(//g)。 是否有一种方法可以在一个命令行中同时删除两个 (, )

我的目标是 "hello my name is user"


回答 1:

可以将字符类 [()] 用作 正规表达式 Pattern,并用空字符串替换 Pattern 以删除它们:

 
sed 's/[()]//g'



 

所以:


% sed 's/[()]//g' <<<"hello my (name) is (user)"


hello my name is user



g 修饰符在所有匹配上执行操作,否则 sed 将在第一次匹配后停止。


回答 2:

可以将括号内容保存在一个组中,并将它的替换为:


sed 's/(([^)]*))/1/g'



这将保存 1组中括号( [^)]* 只匹配 ) 以外的所有内容) 内的所有内容,并将整个括号替换为。 做 g lobally意味着在行中的每一对括号中都做。

用法示例


$ echo '"hello my (name) is (user)"' | sed 's/(([^)]*))/1/g'


"hello my name is user"





相关文章