【问题标题】:sed replace string with conditionsed 用条件替换字符串
【发布时间】:2011-10-03 07:36:44
【问题描述】:

我有一个文件包含几行,每一行的格式如下

2011-07-10 condition hhh aaa: value bbb
2011-07-10 condition ccc aaa: value bbb

我想用sed查找值字符串,在“aaa:”和“bbb”之间,根据字符串后面的条件是ccc的条件替换为“gotit”。 sed之后,这个文件就变成了

  2011-07-10 condition hhh aaa: value bbb
  2011-07-10 condition ccc aaa: gotit bbb

【问题讨论】:

    标签: unix sed


    【解决方案1】:

    鉴于我对 sed/regex 的了解有限:

    sed 's/\(condition ccc.*aaa: \).*\( bbb$\)/\1gotit\2/' file
    

    【讨论】:

    • 对不起,我没有说清楚,在ccc和aaa之间,还有一些其他的文字,只是ccc必须出现在这一行。
    • 公平,然后试试这个:sed 's/\(condition ccc.*aaa: \).*\( bbb$\)/\1gotit\2/' file
    【解决方案2】:

    这里更合乎逻辑:

    sed '/ccc/{ s/\(.*aaa: \).*\( bbb\)/\1gotit\2/g }' inputfile
    

    sed 仅在包含ccc 的行上运行

    【讨论】:

    • 抱歉劫持了你的帖子。如果我想搜索和替换两个字符串“ccc”和“eee”,它们是较大字符串的一部分,我该怎么做? sed '/ccc*\|eee*/{ s/\(.*aaa: \).*\( bbb\)/\1gotit\2/g }' inputfile
    猜你喜欢
    • 2020-07-28
    • 2020-03-13
    • 2017-11-14
    • 1970-01-01
    • 2012-12-21
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多