在Unix发生后插入一个特定的行

时间:2016-04-19 10:52:27

标签: shell unix awk sed

我需要在带有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.txt333333当我发现第二次出现"模式(总是模式)...

最终结果将是:

aaaaaa
bbbbbb
pattern_refrefref
111111
cccccc
aaaaaa
pattern_asdasd
3333333
pattern
555555
zzzzzz

我发现如何在模式之后插入带有新文本的新行,但总是插入相同的文本,我不需要。

2 个答案:

答案 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