【问题标题】:Match string, copy line to next line and modify string using sed匹配字符串,将行复制到下一行并使用 sed 修改字符串
【发布时间】:2017-05-08 09:09:04
【问题描述】:

我有一个包含 2 行的文件

  • 第 1 行:“我的名字是 ABCD”。
  • 第 2 行“我的名字是 XYZ”。

我想用字符串“我的名字”复制所有行并将整行粘贴到下一行,但也用新字符串更改行。 EG:新文件应如下所示:

  • 第 1 行:“我的名字是 ABCD”
  • 第 2 行:“我叫 ABCD,2 岁”
  • 第 3 行:“我的名字是 XYZ”
  • 第 4 行:“我叫 XYZ,2 岁”

【问题讨论】:

    标签: sed


    【解决方案1】:

    试试这个:

    sed 's/My name.*/&\n& and age 2/' file
    

    解释:

    • 模式:My name.* 搜索包含My name 后跟任意字符.* 的行
    • 替换:& 替换为匹配的字符串,后跟换行符\n,后跟匹配字符串\&,后跟and age 2

    就地编辑文件,请添加-i 标志:

    sed -i 's/My name.*/&\n& and age 2/' file
    

    【讨论】:

    • 太棒了!感谢以上工作。如果我需要在字符串中的“is”之后插入“and age 2”,应该如何修改上述命令?
    • 在后面插入的是:sed '/My name is/p;s//& and age 2/' file
    • 抱歉以上没有用。我的意思是:在我原来的问题中,复制的行在整个原始字符串之后附加了“and age 2”。现在我想再次对复制的行进行字符串匹配(使用“is”)并在其中插入“and age 2”,然后是从前一行复制的字符串的其余部分。
    • 请编辑您的问题并给出所需的输出。
    • 太棒了!问题解决了。以上工作。谢谢一百万!
    【解决方案2】:

    您能否尝试关注一下,如果这对您有帮助,请告诉我。

    awk '{Q=$0;sub(/\".$/," and age 2\".",Q);print $0 ORS Q}' Input_file
    

    【讨论】:

      【解决方案3】:
      #!/usr/bin/awk -f
      1
      {
        print $0, "and age 2"
      }
      

      或者:

      #!/bin/sh
      awk '1 {print $0, "and age 2"}' file
      

      【讨论】:

        猜你喜欢
        • 2021-08-19
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        相关资源
        最近更新 更多