📜  sed 在匹配后插入多行 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:34:54.111000             🧑  作者: Mango

使用 sed 在匹配后插入多行

在 Shell/Bash 中,使用 sed 命令可实现对文件编辑的功能。其中,在匹配某个字符串的行后插入多行是一种常见的需求。本文将介绍如何使用 sed 命令实现这一功能。

语法

sed 命令的基本语法如下:

sed [选项] '命令' 文件

其中,选项 可以省略,命令sed 命令的操作字符串,具体语法如下:

[地址] 命令 [选项]

其中,地址 是指定操作区间的范围,可以是行号、正则表达式等,可以省略表示对于整个文件进行操作。

命令sed 命令的操作字符串,包括对文本的增、删、改、查等操作。

选项 是一些额外的参数,用来调整默认行为,可以省略。

在匹配后插入一行

首先,我们来看如何在匹配某个字符串的行后插入一行。假设我们有以下文件:

$ cat test.txt
line 1
line 2
line 3

现在我们想在包含字符串 "line 2" 的行后面插入一行文字 "inserted line",可以使用以下 sed 命令:

$ sed '/line 2/a inserted line' test.txt
line 1
line 2
inserted line
line 3

其中,/line 2/ 是正则表达式,表示匹配包含字符串 "line 2" 的行;a 命令表示在匹配行后面追加一行,在命令后面紧接着要插入的文本 "inserted line"

注意,这里使用了单引号将命令字符串括起来,以避免字符转义。

在匹配后插入多行

接下来,我们来看如何在匹配某个字符串的行后插入多行。以以下文件为例:

$ cat test.txt
line 1
line 2
line 3

现在我们想在包含字符串 "line 2" 的行后面插入以下 3 行文字:

inserted line 1
inserted line 2
inserted line 3

可以使用以下 sed 命令:

$ sed '/line 2/r insert.txt' test.txt
line 1
line 2
inserted line 1
inserted line 2
inserted line 3
line 3

其中,/line 2/ 表示匹配包含字符串 "line 2" 的行;r insert.txt 表示在匹配行后面读取文件 insert.txt 并插入其中的内容。

注意,这里使用了单引号将命令字符串括起来,以避免字符转义。同时,需要将要插入的文本存储在单独的文件中,并使用 r 命令进行读取。