0

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

$ cat text1
Unix 
Windows
Database
Wintel
Sql
Java
$

输出应该是

Unix 
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
4

2 回答 2

1

它看起来有点好笑,但这适用于 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,WindowsDatabase);该p命令打印模式空间;r content读取文件内容并将其添加到输出中;d删除模式空间;将{}这些操作分组,以便它们仅在输入行匹配时发生Unix

必须位于脚本行的r content末尾或-e参数的末尾,如图所示。尝试添加分号后不起作用(毕竟文件名可能包含分号)。

于 2013-09-13T04:18:12.660 回答
0

这可能对您有用(GNU sed):

sed '/Unix/!b;n;n;r another_file' text1

如果该行不包含unix保释。否则打印它并获取下一行,重复然后读入第二个文件。

注意第二行unix首先打印,因为它现在是当前循环的一部分,在当前循环another_file结束后插入到模式空间中。

于 2013-09-13T05:54:34.707 回答