在模式之后将文件插入到其他文件中

在模式之后将文件插入到其他文件中

我如何将文件的内容a(后跟换行符)插入到文件中b,位于包含 的第一行之后PATTERN

答案1

sed '/pattern/{r file_b
a\

:f
n; b f
}' file_a

如果file_b已被换行符终止,并且您不希望输出中出现空行,请a\从脚本中省略该行。

在最后一行,:f定义了一个标签,n读取换行符(由于-n未指定该选项,因此将自动打印换行符sed),然后b f分支到该f标签,从而创建一个循环。所有这些都是为了file_b仅在之后附加第一的线匹配模式。如果你想在file_b后面追加每个行匹配pattern,就简单多了:

sed '/pattern/r file_b' file_a

例子:

$ cat file_a
first
second
third
fourth
first
second
third
fourth
$ cat file_b
b1
b2
b3

$ sed '/second/{r file_b
:f n; b f }' file_a
first
second
b1
b2
b3
third
fourth
first
second
third
fourth

$ printf "x\ny\nz" >file_c
$ sed '/second/{r file_c
a
:f n; b f }' file_a
first
second
x
y
z
third
fourth
first
second
third
fourth

$ sed '/second/r file_b' file_a
first
second
b1
b2
b3
third
fourth
first
second
b1
b2
b3
third
fourth

另一种解决方案是使用ed(1)(令人惊讶的是,在现代 Linux 发行版中默认情况下不可用,尽管 POSIX 强制要求并且自 45 年左右以来就存在于所有 UNIX 系统中):

echo '/pattern/r file_b
w' | ed file_a

这将就地编辑并附加换行符(如果;file_a末尾有换行符) 。file_b如果您希望将输出写入另一个文件,请将 更改ww output_file.

答案2

怎么样

sed '/PATTERN/r a' b

相关内容