我需要在带有shell的text1文件中找到一个模式后插入一个具有特定内容的新行。
我有一个包含以下内容的文件text_file_1.txt
:
aaaaaa
bbbbbb
patternrefrefref
cccccc
aaaaaa
patternasdasd
pattern
zzzzzz
以及包含此内容的text_file_2.txt
:
111111
333333
555555
当我找到" pattern"的第一个匹配项时,我需要插入text_file_2.txt
的第一行(即111111
)。 text_file_1.txt
和333333
当我发现第二次出现"模式(总是模式)...
最终结果将是:
aaaaaa
bbbbbb
pattern_refrefref
111111
cccccc
aaaaaa
pattern_asdasd
3333333
pattern
555555
zzzzzz
我发现如何在模式之后插入带有新文本的新行,但总是插入相同的文本,我不需要。
答案 0 :(得分:3)
使用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
中。pattern
时迭代通过file2,我们从数组中打印一行并递增计数器。答案 1 :(得分:2)
我认为你正在寻找这样的东西......
var copiedObj = angular.copy(myObj)
如果您还想将更改保存在同一个文件中,请使用以下命令:
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行。
what_you_want_to_add
并且您可以每次使用该变量来打印新行,因此在您的情况下它会是这样的。 sed'/ what_you_want_to_find / a $ line'text_file_1.txt