我有一个如下所示的文件,我想搜索模式“Unix”并在模式匹配的行之后的两行插入另一个文件的内容。我想在sed
.
$ cat text1
Unix
Windows
Database
Wintel
Sql
Java
$
输出应该是
Unix
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
我有一个如下所示的文件,我想搜索模式“Unix”并在模式匹配的行之后的两行插入另一个文件的内容。我想在sed
.
$ cat text1
Unix
Windows
Database
Wintel
Sql
Java
$
输出应该是
Unix
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
它看起来有点好笑,但这适用于 GNUsed
和 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
参数的末尾,如图所示。尝试添加分号后不起作用(毕竟文件名可能包含分号)。
这可能对您有用(GNU sed):
sed '/Unix/!b;n;n;r another_file' text1
如果该行不包含unix
保释。否则打印它并获取下一行,重复然后读入第二个文件。
注意第二行unix
首先打印,因为它现在是当前循环的一部分,在当前循环another_file
结束后插入到模式空间中。