【问题标题】:Replace the first and last concurrence of characters only if the line starts with a specific word仅当行以特定单词开头时才替换字符的第一个和最后一个并发
【发布时间】:2015-12-04 01:05:15
【问题描述】:

如果一行以“#”开头,则希望将第一次出现的“(”和最后一次出现的“)”替换为空格,如下所示:

示例输入: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

提前致谢。

【问题讨论】:

    标签: regex linux unix sed


    【解决方案1】:

    您可以使用以下sed 命令:

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

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

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

    【讨论】:

    • 谢谢!我正在考虑做更多这样的事情 sed '/^#/s/((.*))/\t\1\t'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2014-09-13
    • 2019-07-26
    相关资源
    最近更新 更多