一尘不染

使用sed命令在文件的两个模式之间添加文本

linux

我想在两种模式之间添加一些大代码:

File1.txt

This is text to be inserted into the File.

infile.txt

Some Text here
First
Second
Some Text here

我想在 第一第二 之间添加 File1.txt 内容:

所需输出:

Some Text here
First
This is text to be inserted into the File.
Second
Some Text here

我可以使用sed命令使用两种模式进行搜索,但是我不知道如何在它们之间添加内容。

sed '/First/,/Second/!d' infile

阅读 346

收藏
2020-06-03

共1个答案

一尘不染

由于/r代表 读取文件 ,请使用:

sed '/First/r file1.txt' infile.txt

您可以在此处找到一些信息:使用’r’命令读取文件

为就地版本添加-i(即sed -i '/First/r file1.txt' infile.txt)。

要执行此操作,无论字符大小写如何,均应使用在忽略大小写时使用sed中I建议的标记,同时在某些模式之前添加文本:

sed 's/first/last/Ig' file

如评论中所述,以上解决方案只是在模式之后打印给定的字符串,而没有考虑第二个模式。

为此,我将使用带有标志的awk:

awk -v data="$(<patt_file)" '/First/ {f=1} /Second/ && f {print data; f=0}1' file

给定这些文件:

$ cat patt_file
This is text to be inserted
$ cat file
Some Text here
First
First
Second
Some Text here
First
Bar

让我们运行命令:

$ awk -v data="$(<patt_file)" '/First/ {f=1} /Second/ && f {print data; f=0}1' file
Some Text here
First                             # <--- no line appended here
First
This is text to be inserted       # <--- line appended here
Second
Some Text here
First                             # <--- no line appended here
Bar
2020-06-03