【问题标题】:insert a specific line after occurrence with Unix在 Unix 出现后插入特定行
【发布时间】:2016-04-19 19:26:30
【问题描述】:

在使用 shell 的 text1 文件中找到模式后,我需要插入一个包含特定内容的新行。

我有一个文件text_file_1.txt,内容如下:

aaaaaa
bbbbbb
patternrefrefref
cccccc
aaaaaa
patternasdasd
pattern
zzzzzz

还有一个 text_file_2.txt 包含以下内容:

111111
333333
555555

当我找到text_file_1.txt333333 的“模式”的第一次出现时,我需要插入text_file_2.txt 的第一行(即111111),当我找到第二次出现的“模式(总是模式)...

最终结果将是:

aaaaaa
bbbbbb
pattern_refrefref
111111
cccccc
aaaaaa
pattern_asdasd
3333333
pattern
555555
zzzzzz

我找到了如何在模式之后插入带有新文本的新行,但始终插入相同的文本,我不需要。

【问题讨论】:

  • 请正确格式化您的问题。
  • 您尝试了哪些方法,又是如何失败的?我会求助于 Awk(提示:NR==FNR),不过我想在sed 中也可以这样做。
  • 我试过这样的:sed '/pattern/a 111111' file
  • 对不起@derlarsschneider 我的英语很差;)

标签: shell unix awk sed


【解决方案1】:

这很容易使用 awk 完成:

awk 'FNR==NR{a[FNR]=$0; next} 1; /pattern/{print a[++i]}' text_file_2.txt text_file_1.txt

aaaaaa
bbbbbb
patternrefrefref
111111
cccccc
aaaaaa
patternasdasd
333333
pattern
555555
zzzzzz
  • 在第一个块FNR==NR 中,我们从file2 中读取所有行并将它们存储在索引数组a 中。
  • 在遍历 file2 时,每当遇到 pattern 时,我们会从数组中打印一行并递增计数器。

【讨论】:

  • 太棒了!它工作正常 :D 非常感谢你。你知道我在手动处理文件上浪费了很多时间^_^
【解决方案2】:

我想你正在寻找这样的东西......

sed '/what_you_want_to_find /a what_you_want_to_add' text_file_1.txt

如果您还想将更改保存在同一文件中,请使用:

sed -i '/what_you_want_to_find /a what_you_want_to_add' text_file_1.txt

为了帮助您更多,在您添加要打印的新内容时,在what_you_want_to_add 中,您可以这样做。 每次将每一行保存在 sed 之外的变量中, 例如你想得到第 5 行。

line= awk 'NR==5' text_file_2.txt

并且您每次都可以使用该变量来打印新行,因此在您的情况下会这样。 sed '/what_you_want_to_find /a $line' text_file_1.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多