仅当行以特定单词开头时,才替换字符的第一个和最后一个并发

时间:2015-12-02 23:57:22

标签: regex linux unix sed

如果一行以"#"开头,则要替换第一次出现的"("以及最后一次出现")"以下是空格:

示例输入:cat world.txt

MAP MT.POS(AUS) , SOUTH
#TARGET(MT.POS(USA) , NORTH)
MAP MT.POS(CAN) , NORTH

我正在尝试使用sed,如下所示

cat world.txt | sed -e '/^#/s/\(.*\))/\1 /; /^#/s/\(.*\)(/\1/'

以下是我的期望。

MAP MT.POS(AUS) , SOUTH
#TARGET MT.POS(USA) , NORTH
MAP MT.POS(CAN) , NORTH

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用以下sed命令:

sed '/^#/s/(\(.*\))/\1/' file

/^#/是一个地址,匹配以#开头的行。这些行受以下s替换)命令的约束。它搜索行中的第一个和最后一个括号,并用它们之间的文本替换它们。

请注意.*匹配贪婪。这意味着它将消耗尽可能多的字符(包括括号),直到在行中找到最后一个右括号。