Shell 在Unix中出现后插入特定行
我需要插入一个具有特定内容的新行后,在text1文件与shell中找到一个模式 我有一个包含以下内容的文件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
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非常感谢。你知道我浪费了很多时间手工处理文件^_^