2015-12-02 52 views
1

如果行以“#”开头,​​则将用空格替换第一个出现的“(”和最后出现的“)”作为空白以下:仅当行以特定字开头时,才替换第一个和最后一个字符的并发

样品输入:猫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

您可以使用下面的命令sed

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

/^#/是地址匹配线开始具有#。这些行的主题是以下s替代)命令。它搜索行中的第一个和最后一个圆括号,并用它们之间的文本替换它们。

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

+0

谢谢。我正在考虑做更多这样的sed'/^#/s/(\(.*\))/\t\1\t' – CodeDevotion