绵阳新闻网

首页 > 正文

Linux 流编辑器 sed 详解

www.tgyhc.com2019-09-02

首先,流编辑器sed和命令sed

在Linux中,流编辑器sed通常用于文本替换。与常用的交互式编辑器(如vim)不同,sed编辑器以批处理模式编辑文件,这比交互式编辑器快得多,并允许您快速编辑和修改数据。

通常,sed编辑器执行以下操作:

1)一次从输入中读取一行数据;

2)根据提供的编辑器命令匹配数据;

3)根据命令修改流中的数据;

4)将新数据输出到STDOUT。

在sed编辑器匹配一行数据后,它会读取下一行数据并重复该过程,直到处理完所有数据。使用sed命令打开sed编辑器。 sed命令的格式如下:

sed [options] edit_commands [file]#[]中的内容是可选的。

其中,options是命令选项,可以使用不同的选项来修改sed命令的行为。主要有三种选择:

1)-e选项:处理输入时,脚本中指定的edit命令将添加到现有命令中。通俗地说,只需在sed:

之后直接添加编辑命令

Sed -e'edit_commands'[files]

sed命令默认使用-e选项。当只有一个编辑命令时,在-e sed语句中执行多个编辑命令时,需要使用-e选项:

Sed -e's/root/ROOT/g; s/bin/BIN/g'/etc/passwd#使用sed编辑命令(本文中的大多数用例直接使用/etc/passwd文件)

sed -e's/root/ROOT/g'-e's/bin/BIN/g'/etc/passwd#使用sed编辑命令

2)-f选项:处理输入时,使用文件编辑命令时,可以使用-e选项。但是,当需要执行的编辑命令的数量很大时,每次一个接一个地使用sed显然是不方便的。在这种情况下,您可以将使用过的sed编辑命令写入文件,然后使用sed -f选项指定读数。文件:

$ cat script.sed

$ s/root/ROOT/

$ s/bin/BIN/

$ s/home/HOME/

sed -f script.sed/etc/passwd

3)-n选项:不生成命令输入:

Sed -n's/root/ROOT /'/etc/passwd

使用-n选项不会将流编辑器的内容输出到STDOUT,并且-n选项通常与p命令一起使用以仅打印匹配的行。

除了这三个选项之外,sed编辑器还提供了许多用于更详细操作的命令,一个简单的列表,然后仔细查看:

077e25721ec048d5978bfe01a476a2ba

第四,使用sed命令删除行

sed编辑器使用d命令删除文本流中的特定行。使用d命令时,通常需要使用高位寻址来删除指定的行,否则默认情况下将删除所有文本行:

sed'/root/d'/etc/passwd#删除匹配根

的行

Sed'2,$ d'/etc/passwd#删除第二行到最后一行

5.使用sed命令

插入和附加文本

sed编辑器使用i命令在数据流中插入一行文本,并使用a命令将一行文本附加到流中。其中:i命令在指定行之前添加新行; a命令在指定行之后添加一个新行。

应该注意的是,这些命令都不能用于单个命令行(即,不用于将一段文本插入或附加到一行),而只能插入或附加到另一行。命令格式如下:

Sed'[地址] [i | A]

Ewline'档案

换行中的文本是将插入或附加到行的前面或后面的文本。这两个命令通常与行寻址结合使用,以在特定行之前或之后添加新行。例如:

sed'i插入每一行后面的一行'/etc/passwd#在数据流的每一行的前面添加一个新行。新行的内容是以下内容

Sed'1i在第一行后面插入一行'/etc/passwd#在数据流的第一行之前添加一个新行

Sed'3a在第三行之后加一行'/etc/passwd#在数据流的第三行之后添加一个新行

sed'$ a在最后一行加上一行'/etc/passwd#在数据流的最后一行之后添加一个新行

6.使用sed命令修改行

使用命令c将数据流中的整行文本修改为新行,与插入和附加操作一样,这需要使用以下格式在sed命令中指定新行:

Sed'[地址] [c]

Ewtext'文件

newtext中的文本是匹配行将被修改为的文本。

Sed'3 cNew text'/etc/passwd#将数据流第三行的内容修改为以下内容

sed'/root/cNew text'/etc/passwd#将匹配根的行的内容修改为以下内容

sed'2,4c新文本'/etc/passwd#将第2行到第4行的内容修改为以下内容,但不是逐行修改,而是用文本行替换它们之间的3行

>

请注意,使用c命令修改地址范围时,不会逐行修改地址范围,但整个时间间隔将替换为修改后的文本行。

七,使用sed命令逐字转换

使用y参数可根据需要将文本转换为字符。格式如下:

[地址] Y/inchars/outchars/

转换命令将inchars和outchars的值一对一映射。 inchars中的第一个字符被转换为outchars中的第一个字符; inchars中的第二个字符转换为outchars中的第二个字符;直到处理一行。如果inchars和outchars的长度不同,sed编辑器将生成错误消息。例如:

Echo abcdefggfedcba | sed'y/acg/ACG /'

输出是AbCdefGGfedCbA。

八,使用sed命令处理文件

8.1将数据写入文件

如前所述,您可以使用w命令将行写入文件。格式如下:

[地址] w filename

例如:

Sed'1,2w test.txt'/etc/passwd

此语句将数据流的第1行和第2行写入文件test.txt。

8.2从文件中读取数据

您可以使用r命令将文本中的数据插入到数据流中,类似于普通插入命令i,它也对行进行操作。命令格式如下:

[地址] r filename

Filename是要插入的文件。 r命令通常与行寻址结合使用,以在指定行之后插入文本。例如:

Sed'3 r test.txt'/etc/passwd

此句子将文件test.txt的内容插入到数据流的第三行。

热门浏览
热门排行榜
热门标签
日期归档