【问题标题】:sed/awk: replace N occurrencesed/awk:替换 N 次出现
【发布时间】:2011-07-06 05:03:28
【问题描述】:


是否可以使用单行 sed/awk 更改 N(例如第二次出现)在文件中,但这种方法除外?:

line_num=`awk '/WHAT_TO_CHANGE/ {c++; if (c>=2) {c=NR;exit}}END {print c}' INPUT_FILE` && sed  "$line_num,$ s/WHAT_TO_CHANGE/REPLACE_TO/g" INPUT_FILE > OUTPUT_FILE


谢谢

【问题讨论】:

    标签: sed awk


    【解决方案1】:

    要更改一行中的第 N 次出现,您可以使用以下命令:

    $ echo foo bar foo bar foo bar foo bar | sed 's/foo/FOO/2'
    foo bar FOO bar foo bar foo bar
    

    因此,您所要做的就是为您的文本创建一个“单行”,例如使用tr

    tr '\n' ';'
    

    进行替换,然后再次使用将其转换回多行

    tr ';' '\n'
    

    【讨论】:

    • 谢谢,TR 的好技巧 - 因为没有那个 's/foo/FOO/2' 对我不起作用
    【解决方案2】:

    此 awk 解决方案假定 WHAT_TO_CHANGE 每行仅出现一次。以下将第二个“一”替换为“二”:

    awk -v n=2 '/one/ { if (++count == n) sub(/one/, "TWO"); } 1' file.txt
    

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2020-04-27
      • 2016-12-02
      相关资源
      最近更新 更多