【问题标题】:Match specific lines in sed command匹配 sed 命令中的特定行
【发布时间】:2013-06-29 03:20:32
【问题描述】:

如何为替换命令匹配一组特定的行?

(不正确):

sed -e'71,116,211s/[ ]+$//' ...

我只想去除第 71、116 和 211 行的尾随空格

【问题讨论】:

    标签: unix text command-line sed pipe


    【解决方案1】:

    你可以试试这样的:

    awk 'NR== 71 || NR == 116 || NR == 211 {sub(/ *$/,"",$0)}{print $0}'
    

    sed '71s/ *$//;116s///;211s///'
    

    【讨论】:

    • 我想发布您的sed 解决方案,但有一点改进(我认为),如果您将正则表达式部分留空,则需要最后一个。所以只需要写一次(第一行)然后像:... 116s///;...
    • 好点 - 我忘记了 - 我已经更新了答案
    【解决方案2】:
    sed '71bl;116bl;211bl;b;:l;s/[ ][ ]*$//' input
    

    对于任何指定的行,此脚本会跳转到标签l。其他行会以branch 跳转到脚本的末尾。

    还有一个 awk 解决方案:

    awk -v k="71,116,221" 'BEGIN{split(k,a,",")} 
                (NR in a) { sub(/ *$/,"",$0) }1' input
    

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

      sed -r '/\s+$/!b;71s///;116s///;221s///' file
      

      或许:

      sed -e '/  *$/!b' -e '71s///' -e '116s///' -e '221s///' file
      

      或者如前所述:

      sed -e '71ba' -e '116ba' -e '221ba' -e 'b' -e ':a' -e 's/  *$//' file
      

      【讨论】:

        猜你喜欢
        • 2019-11-06
        • 2017-07-19
        • 2017-02-02
        • 2016-06-11
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多