首页 > 解决方案 > 有没有办法匹配文件中的字符串并在字符串匹配后的下一行打印/附加另一个文件(单行)的内容

问题描述

我正在尝试匹配文件中的字符串并在字符串匹配后打印/附加另一个文件的内容

我有包含单行的文件“addthis” pleaseaddme

pleaseaddme

我有第二个文件“tothis”,其中包含两行 [one] 和 [two],如下所示:

[one]

[two]

我已经尝试过组合导致以下接近我想要的结果:

awk '/\[one\]/ { printf $0; getline < "addthis" }1' tothis

结果:

[one]please add me

[two]

我希望在 [one] 之后将“请添加我”添加到新行,如下所示:

[one]
please add me
[two]

此外,这只是打印到屏幕上,而不是打印到文件“tothis”中

已经尝试了许多变化,这与我得到的一样接近

标签: awk

解决方案


awk '/\[one\]/ {getline var< "addthis"; $0 = $0 ORS var }1' tothis
#=> [one]
#=> pleaseaddme
#=> [two]

你应该逃跑的第一件事[]
然后将文件读取到变量中,并将其“附加”到当前行。

另一种方法可能是:

awk '/\[one\]/ {print; getline var< "addthis"; print var; next }1' tothis

根据您自己的尝试,实际上更改printfprint将起作用:

awk '/\[one\]/ { print $0; getline < "addthis" }1' tothis
#=> [one]
#=> pleaseaddme
#=> [two]

因为printf不会打印ORS,但print会。
但是在这个帐户上,是多余的,因为默认情况下$0会打印不带参数的打印。$0

至于就地更改,您仍然可以重定向到临时文件并稍后替换文件。


推荐阅读