如何在找到模式的行之后插入两行文件的内容?

时间:2013-09-13 03:16:24

标签: sed

我有一个如下所示的文件,我想搜索模式“Unix”并在模式匹配的行之后插入另外两个文件的内容。我想在sed中完成。

$ cat text1
Unix 
Windows
Database
Wintel
Sql
Java
$

输出应为

Unix 
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java

2 个答案:

答案 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命令为模式空间添加额外的行(因此模式空间包含三行包含UnixWindowsDatabase); 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在当前循环结束后插入到模式空间中。