【问题标题】:how to append a line with sed/awk after specific text如何在特定文本后附加一行 sed/awk
【发布时间】:2016-10-06 16:41:50
【问题描述】:

我想用 sed 或 awk 翻译这个输入文件:

input
1 AA
3 BB
5 CC

output
1 AA
3 BB
3 GG
5 CC

我在此站点 sed -i '/^BB:/ s/$/ GG/' 文件上找到的最接近的语法,但它确实是 3 BB GG。我需要的类似于 vi yank、paste 和 regex 替换。 这可以用 sed 或 awk 完成吗?谢谢 兰德

【问题讨论】:

    标签: awk sed


    【解决方案1】:

    使用 GNU sed:

    sed -r 's/^([^ ]*) BB$/&\n\1 GG/' file
    

    输出:

    1 AA 3 BB 3个GG 5 抄送

    【讨论】:

      【解决方案2】:

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

      sed '/BB/p;s//GG/' file
      

      如果该行包含所需的字符串,则打印它,然后用另一个字符串代替它。

      【讨论】:

        【解决方案3】:

        awk 是一个很好的选择:

        awk '{print $0} $2=="BB"{print $1,"GG"}' yourfile.txt
        

        这将打印{print $0} 行。然后如果该行中的第二个字段等于“BB”,它将打印该行中的第一个字段(数字)和文本“GG”。

        使用示例:

        >echo "1 AA\n3 BB\n4 RR" | awk '{print $0} $2=="BB"{print $1,"GG"}'
        1 AA
        3 BB
        3 GG
        4 RR
        

        【讨论】:

          【解决方案4】:

          在 awk 中:

          $ awk '1; /BB/ && $2="GG"' input
          1 AA
          3 BB
          3 GG
          5 CC
          

          1 打印记录。如果刚刚打印的记录中有BB,则将其替换为GG,然后重新打印。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-25
            • 1970-01-01
            • 2017-02-25
            • 1970-01-01
            相关资源
            最近更新 更多