【问题标题】:regex - append file contents after first match正则表达式 - 在第一次匹配后附加文件内容
【发布时间】:2015-04-29 05:50:28
【问题描述】:

假设我有以下几种文件:

file1.txt:

a a c
b b c
c c c
d d c
e e c
a a c
b b c
c c c
d d c
e e c

file2.txt:

—————
—————
—————

我如何从file2.txt 获取内容,以便我最终得到file1.txt,上面写着:

a a c
b b c
c c c
—————
—————
—————
d d c
e e c
a a c
b b c
c c c
d d c
e e c

...不只是在第三行之后添加内容(第一行是c c c)。

【问题讨论】:

  • 我给了-1,因为我没有看到任何解决它的尝试。
  • @Jotne 好的,但是有 2 个漂亮的答案。
  • 这不是重点。凭借超过 700 的声誉,您现在应该是我们在这里为您提供代码帮助,而不是为您提供完整的解决方案。

标签: linux awk sed text-processing


【解决方案1】:

使用GNU sed(命令需要多行分布):

sed '0,/c c c/ {
    /c c c/r file2.txt
}' file1.txt
a a c
b b c
c c c
—————
—————
—————
d d c
e e c
a a c
b b c
c c c
d d c
e e c

【讨论】:

    【解决方案2】:
    awk 'NR==FNR{buf = buf $0 RS;next} {print} /c c c/ && !done{ printf "%s", buf; done=1  }' file2.txt file1.txt
    

    【讨论】:

    • 您在块内使用 print 而不是 1 的任何原因?
    • 为了清楚起见,我喜欢在脚本末尾使用1 以保持简洁和易于查看,但我觉得任何阅读它的人都容易错过@ 987654323@ 在脚本中间,所以在脚本中间我倾向于使用显式的{print}
    • 很公平,很好的答案:)
    猜你喜欢
    • 2015-04-29
    • 2022-01-11
    • 2014-10-19
    • 1970-01-01
    • 2021-09-15
    • 2016-03-18
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多