我有一个如下所示的文件,我想搜索模式“Unix”并在模式匹配的行之后插入另外两个文件的内容。我想在sed
中完成。
$ cat text1
Unix
Windows
Database
Wintel
Sql
Java
$
输出应为
Unix
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
答案 0 :(得分:1)
看起来有点滑稽,但这适用于GNU sed
和BSD sed
(在Mac OS X上),并且适用于sed
的大多数版本:
sed -e '/Unix/{N;N;p;r content' -e 'd;}' data
或者:
sed -e '/Unix/{
N
N
p
r content
d
}' data
N
命令为模式空间添加额外的行(因此模式空间包含三行包含Unix
,Windows
和Database
); p
命令打印模式空间; r content
读取文件内容并将其添加到输出中; d
删除模式空间; {}
对这些操作进行分组,以便它们仅在输入行与Unix
匹配时才会出现。
r content
必须位于脚本行的末尾,或者位于-e
参数的末尾,如图所示。尝试在分号后无法添加分号(毕竟,文件名可能包含分号)。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '/Unix/!b;n;n;r another_file' text1
如果该行不包含unix
拯救。否则打印并获取下一行,重复然后读入第二个文件。
N.B。首先打印unix
之后的第二行,因为它现在是当前循环的一部分,another_file
在当前循环结束后插入到模式空间中。