【问题标题】:Modified copies of line sed / awksed / awk 行的修改副本
【发布时间】:2014-02-01 10:20:25
【问题描述】:

我正在尝试在原始行之后插入行的修改副本。

这是我的文件:

random
N:John Doe
random
N:Jane Roe
random
random
N:Name Sirname
random

这是我的文件需要的样子:

random
N:John Doe
FN:John Doe
random
N:Jane Roe
FN:Jane Roe
random
random
N:Name Sirname
FN:Name Sirname
random

对这个有什么想法吗?似乎找不到合适的 sed/awk 组合...

【问题讨论】:

    标签: bash sed awk


    【解决方案1】:
    sed -n ' p; s/^N:/FN:/p' original.txt
    

    这会产生:

    random
    N:John Doe
    FN:John Doe
    random
    N:Jane Roe
    FN:Jane Roe
    random
    random
    N:Name Sirname
    FN:Name Sirname
    random
    

    它的工作原理如下。我们调用sed -n,这意味着默认情况下它不会打印任何行。然后,我们给它两个命令。第一个,p,是打印现有的行unmodified。第二个,s/^N:/FN:/p,告诉它尝试用FN:替换任何​​前导N:,如果替换成功(意味着该行确实以N:开头),那么 打印修改后的版本。

    【讨论】:

      【解决方案2】:

      您应该能够通过以下方式做到这一点:

      sed -e 's/^\(N:.*\)$/\1\nF\1/g' yourfile.txt
      

      这使用正则表达式来查找以字符序列“N:”开头的文件。当它找到它时,它用\1\nF\1 替换该行(原行,加上换行符,加上大写的'F',再加上原来的行)。

      这一切都假设“随机”行不会以“N:”开头。

      【讨论】:

        【解决方案3】:

        使用 & 插入匹配的副本

        & 符号会将完整匹配的副本从左侧插入到 sed 表达式的右侧。因此,只需使用简单的替换在匹配副本之间放置换行符和前导 F 即可。例如:

        $ sed 's/^N:.*/&\nF&/' /tmp/corpus.txt 
        random
        N:John Doe
        FN:John Doe
        random
        N:Jane Roe
        FN:Jane Roe
        random
        random
        N:Name Sirname
        FN:Name Sirname
        random
        

        【讨论】:

          【解决方案4】:

          这是一个awk 解决方案:

          awk '/N:/{print $0"\nF"$0;next}1' file
          

          $ cat file
          random
          N:John Doe
          random
          N:Jane Roe
          random
          random
          N:Name Sirname
          random
          

          $ awk '/N:/{print $0"\nF"$0;next}1' file
          random
          N:John Doe
          FN:John Doe
          random
          N:Jane Roe
          FN:Jane Roe
          random
          random
          N:Name Sirname
          FN:Name Sirname
          random
          

          【讨论】:

            猜你喜欢
            • 2011-01-10
            • 2014-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-18
            • 1970-01-01
            • 2015-03-19
            相关资源
            最近更新 更多