Linux文件处理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
运行后,终端输出如下:
我们看到,我们使用了 sed 命令,打印了文件的第五行的内容。
打印文件的第N1行到第N2行
语法
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命令详解总结
Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。
Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 ”模式空间”( oattern space),接看用 sed 命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据。