【问题标题】:replacing a pattern using sed command使用 sed 命令替换模式
【发布时间】:2013-10-11 01:43:11
【问题描述】:

我想用 sed 命令替换一个模式。我有一个包含以下数据的文件。

50%%R39%35%R43%-35%R4Z%10%RRN%1110%R0M%-950

现在我需要将模式%RRN%<something>% 替换为%RRN%0%。输出应该是这样的。

50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950

为此,我使用了以下命令

sed 's/%RRN%\(.*\)%/%RRN%0%/g' 

但我没有得到正确的输出。如下图所示。

50%R39%35%R43%-35%R4Z%10%RRN%0%-950

请帮帮我

【问题讨论】:

    标签: shell sed


    【解决方案1】:
    perl -pe '$a="0%";s/(%RRN%)[^%]*%/$1$a/g'
    

    【讨论】:

      【解决方案2】:

      如果你想试试awk,你可以这样做:

      echo '50%%R39%35%R43%-35%R4Z%10%RRN%1110%R0M%-950' | awk '{sub(/%RRN%[^%]*%/,"%RRN%0%")}1'
      50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950
      

      【讨论】:

        【解决方案3】:

        更好的解决方案是使用[^%]\+ 代替.*

        sed 's/%RRN%\([^%]\+\)%/%RRN%0%/g'
        

        输出:

        50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950
        

        【讨论】:

        • 对不起,Jkshah,我已经编辑了问题...输出应该如下50%%R39%35%R43%-35%R4Z%10%RRN%0%R0M%-950
        • 我想要%RRN%0% 的新模式,而在您的输出中它与%RRN%1110% 相同
        • @vishal 你检查过我编辑的正则表达式吗?我已经更新了正则表达式和输出
        • @jkshah 你的正则表达式中的+ 在第一篇文章中出现问题,使用* 应该这样做:sed 's/%RRN%[^%]*%/%RRN%0%/g'
        • @Jotne 同意我需要逃避这一点。现在是否使用+* 取决于要求
        猜你喜欢
        • 2022-01-10
        • 2012-12-29
        • 1970-01-01
        • 2018-09-16
        • 1970-01-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        相关资源
        最近更新 更多