Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。
Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。
对文本进行过滤与替换。
sed [options] [cmd] [filename]
参数 | 描述 |
---|---|
options | sed 命令使用的参数。 |
cmd | 脚本指令。 |
filename | 要处理的文件,如果没有指定,从标准输入读取。 |
参数 | 描述 |
---|---|
–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 | 最低限度的缓存输入和输出。 |
命令 | 描述 |
---|---|
a\ | 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用 “\” 续行。 |
c\ | 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用 “\” 续行。 |
i\ | 在当前行之前插入文本。多行时除最后一行外,每行末尾需用 “\” 续行。 |
d | 删除行。 |
h | 把模式空间里的内容复制到暂存缓冲区。 |
H | 把模式空间里的内容追加到暂存缓冲区。 |
g | 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容。 |
G | 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面。 |
l | 列出非打印字符。 |
p | 打印行。 |
n | 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理。 |
q | 结束或退出 sed。 |
r | 从文件中读取输入行。 |
! | 对所选行以外的所有行应用命令。 |
s | 用一个字符串替换另一个。 |
g | 在行内进行全局替换。 |
w | 将所选的行写入文件。 |
x | 交换暂存缓冲区与模式空间的内容。 |
y | 将字符替换为另一字符(不能对正则表达式使用y命令)。 |
实例 | 描述 |
---|---|
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 |
sed -n '3p' file
我们使用 sed 命令,查看文件 /etc/passwd 的第五行内容,具体命令如下:
sed -n '5p' /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,打印了文件的第五行的内容。
sed -n 'n1,n2p' file
我们使用 sed 命令,查看文件 /etc/passwd 的第 5 行到第 8 行的内容,具体命令如下:
sed -n '5,8p' /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,打印了文件的第五行到第八行的内容。
sed -n '/str1/,/str2/p' file
我们使用 sed 命令,查看文件 /etc/passwd 中包含指定字符串的行到指定字符串行的内容,具体命令如下:
sed -n '/tcpdump/,/adm/p' /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,打印了文件中包含 tcpdump 和包含 adm 的行之间的内容。
sed -n '/str/p' file
我们使用 sed 命令,查看文件 /etc/passwd 中包含指定字符串的内容,具体命令如下:
sed -n '/root/p' /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,打印了文件中包含 root 的行。
sed 's/str1/str2/g' file
我们使用 sed 命令,查看文件 /etc/passwd 中的内容,并将 str1 替换为 str2,具体命令如下:
sed 's/root/super/g' /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,将文件中所有的 root 替换为了 super。
sed '3,9d' file
我们使用 sed 命令,删除文件 /etc/passwd 的第三行到第二十七行,具体命令如下:
sed '3,27d' /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,删除了文件的第三行到第二十七行。
Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。
Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。