Linux文件处理sed命令详解

Linux文件处理sed命令详解教程

Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。

Linux sed命令使用

Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。

定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。

Linux sed命令详解

功能

对文本进行过滤与替换。

语法

sed [options] [cmd] [filename]

参数

参数 描述
options sed 命令使用的参数。
cmd 脚本指令。
filename 要处理的文件,如果没有指定,从标准输入读取。

sed命令常用参数

参数 描述
–version 显示 sed 版本。
–help 显示帮助文档。
-n,–quit,–silent 静默输出,默认情况下,sed 程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,该选项可以屏蔽自动打印。
-e script 允许多个脚本指令被执行。
-f script-file 从文件中读取脚本指令,对编写自动脚本程序很实用。
-i,–in-place 慎用,该选项将直接修改源文件。
-l,N 该选项指令l指令可以输出的行长度,l指令为输出非打印字符。
–posix 禁用 GNU sed 扩展功能。
-r 在脚本指令中使用扩展正则表达式。
-s,–separate 默认情况下,sed 将把输入的多个文件名作为一个长的连续的输入流,而 GNU sed 则允许把它们当作单独的文件。
-u,–unbuffered 最低限度的缓存输入和输出。

Linux sed命令功能详解

命令 描述
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用 “\” 续行。
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用 “\” 续行。
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用 “\” 续行。
d 删除行。
h 把模式空间里的内容复制到暂存缓冲区。
H 把模式空间里的内容追加到暂存缓冲区。
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容。
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面。
l 列出非打印字符。
p 打印行。
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理。
q 结束或退出 sed。
r 从文件中读取输入行。
! 对所选行以外的所有行应用命令。
s 用一个字符串替换另一个。
g 在行内进行全局替换。
w 将所选的行写入文件。
x 交换暂存缓冲区与模式空间的内容。
y 将字符替换为另一字符(不能对正则表达式使用y命令)。

Linux sed命令常用实例

实例

实例 描述
sed -n ‘3p’ file 打印文件 file 的第三行内容
sed -n ‘n1,n2p’ file 打印文件 file 的第 n1 行到 n2 行的内容
sed -n ‘/str1/,/str2/p’ file 显示文件 file 中包含 str1 的行到包含 str2 的行之间的行
sed -n ‘/str/p’ file 显示文件 file 中匹配字符串 str 的行
sed ‘s/str1/str2/g’ file 将文件 file 中所有的 str1 替换为 str2,不写入文件
sed -i ‘s/str1/str2/g’ file 将文件 file 中所有的 str1 替换为 str2,并写入文件
sed -e ‘1i str1’ -e ‘$a str2’ file 在文件 file 的第一行添加 str1,文件 file 结尾添加 str2
sed ‘1,4i str’ file 在文件第一行和第四行的每行下面添加 str
sed ‘s/world/hello_&/g’ file & 符号在 sed 命令中代表上次匹配的结果,这里表示将 world 替换为 hello_word
sed ‘3,9d’ file 删除文件的第三行到第九行
sed ‘/str1/,/str2/d’ file 删除 file 中包含 str1 到包含 str2 的行
sed ‘5,10 s/str1/str2/g’ file 将文件的第五行到第十行的所有的 str1 替换为 str2
sed -n -e ‘3,6p’ -e ‘s/str1/str2/g’ file 打印 3 到 6 行的内容,并匹配 str1 替换为 str2

打印文件的第N行

语法

sed -n '3p' file

案例

我们使用 sed 命令,查看文件 /etc/passwd 的第五行内容,具体命令如下:

sed -n '5p' /etc/passwd

运行后,终端输出如下:

62_Linux文件处理sed命令.png

我们看到,我们使用了 sed 命令,打印了文件的第五行的内容。

打印文件的第N1行到第N2行

语法

sed -n 'n1,n2p' file

案例

我们使用 sed 命令,查看文件 /etc/passwd 的第 5 行到第 8 行的内容,具体命令如下:

sed -n '5,8p' /etc/passwd

运行后,终端输出如下:

63_Linux文件处理sed命令.png

我们看到,我们使用了 sed 命令,打印了文件的第五行到第八行的内容。

打印文件包含字符串的行

语法

sed -n '/str1/,/str2/p' file

案例

我们使用 sed 命令,查看文件 /etc/passwd 中包含指定字符串的行到指定字符串行的内容,具体命令如下:

sed -n '/tcpdump/,/adm/p' /etc/passwd

运行后,终端输出如下:

64_Linux文件处理sed命令.png

我们看到,我们使用了 sed 命令,打印了文件中包含 tcpdump 和包含 adm 的行之间的内容。

打印文件中匹配字符串的行

语法

sed -n '/str/p' file

案例

我们使用 sed 命令,查看文件 /etc/passwd 中包含指定字符串的内容,具体命令如下:

sed -n '/root/p' /etc/passwd

运行后,终端输出如下:

65_Linux文件处理sed命令.png

我们看到,我们使用了 sed 命令,打印了文件中包含 root 的行。

替换字符串

语法

sed 's/str1/str2/g' file

案例

我们使用 sed 命令,查看文件 /etc/passwd 中的内容,并将 str1 替换为 str2,具体命令如下:

sed 's/root/super/g' /etc/passwd

运行后,终端输出如下:

66_Linux文件处理sed命令.png

我们看到,我们使用了 sed 命令,将文件中所有的 root 替换为了 super。

删除行

语法

sed '3,9d' file

案例

我们使用 sed 命令,删除文件 /etc/passwd 的第三行到第二十七行,具体命令如下:

sed '3,27d' /etc/passwd

运行后,终端输出如下:

67_Linux文件处理sed命令.png

我们看到,我们使用了 sed 命令,删除了文件的第三行到第二十七行。

Linux文件处理sed命令详解总结

Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。

Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。