Shell 在Unix中出现后插入特定行

Shell 在Unix中出现后插入特定行,shell,unix,awk,sed,Shell,Unix,Awk,Sed,我需要插入一个具有特定内容的新行后,在text1文件与shell中找到一个模式 我有一个包含以下内容的文件text\u file\u 1.txt: aaaaaa bbbbbb patternrefrefref cccccc aaaaaa patternasdasd pattern zzzzzz 111111 333333 555555 以及包含以下内容的text\u文件\u 2.txt: aaaaaa bbbbbb patternrefrefref cccccc aaaaaa pattern

我需要插入一个具有特定内容的新行后,在text1文件与shell中找到一个模式

我有一个包含以下内容的文件
text\u file\u 1.txt

aaaaaa
bbbbbb
patternrefrefref
cccccc
aaaaaa
patternasdasd
pattern
zzzzzz
111111
333333
555555
以及包含以下内容的
text\u文件\u 2.txt

aaaaaa
bbbbbb
patternrefrefref
cccccc
aaaaaa
patternasdasd
pattern
zzzzzz
111111
333333
555555
当我找到
text\u file\u 1.txt的第一个匹配项时,我需要插入
text\u file\u 2.txt的第一行(即
111111
),当我找到第二个匹配项“pattern(always pattern)

最终结果将是:

aaaaaa
bbbbbb
pattern_refrefref
111111
cccccc
aaaaaa
pattern_asdasd
3333333
pattern
555555
zzzzzz

我发现了如何在一个图案后插入一行新的文字,但总是插入相同的文字,我不需要它。

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

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
为了给您提供更多帮助,在添加您想要打印的新内容时,您可以在
您想要添加的内容中这样做。
每次在sed之外的变量中保存每一行,
例如,您希望获得第5行

line= awk 'NR==5' text_file_2.txt
你每次都可以使用这个变量来打印新行,所以在你的例子中是这样的。
sed'/what\u you\u想要\u查找/a$line'文本文件\u 1.txt

使用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
    中,我们从文件2中读取所有行,并将它们存储在索引数组
    a
  • 每当遇到
    pattern
    时,在迭代file2时,我们从数组中打印一行并递增计数器

请正确格式化您的问题。您尝试了什么,它是如何失败的?我将转向Awk(提示:
NR==FNR
),虽然我想在sed中也可以这样做。我试过这样的方法:sed'/pattern/a 111111'filesorry@derlarsschneider我的英语很差;)太棒了!工作很好:D非常感谢。你知道我浪费了很多时间手工处理文件^_^