一、sed简介
sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。
处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
二、sed命令功能
命令 功能
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
三、sed常见命令参数
p:print
d:delete
=:打印匹配行的行号
-n 取消默认的完整输出,只要需要的
-e 允许多项编辑
-i 修改文件内容
-r 不需要转义
四、举例sed常见用法
源文件如下:


1、只打印第三行文字
sed -n '3p' 123.txt


2、只查看文件的第3行到第9行
sed -n '3,9p' 123.txt


3、过滤特定字符串,显示正行内容
sed -n '/222/p' 123.txt


4、打印1-5行,并显示行号
sed -n -e '1,5p' -e '=' 123.txt


5、仅仅显示匹配字符串的行号
sed -n '/5555/=' 123.txt


6、将‘1111’替换为‘1111第一行’
sed 's/1111111/11111第一行/g' 123.txt


注:-i命令才会真实生效
sed -i 's#222#222第二行#g' 123.txt


7、打印最后一行
sed -n '$p' 123.txt


8、在文件第一行添加start,文件结尾添加over
界面现实:sed -e '1i start' -e '$a over' 123.txt


真实写入:
sed -i -e '1i start' -e '$a over' 123.txt


9、在文件第一行和第四行的每行下面添加helloworld
sed '1,4i helloworld' 123.txt


10、& 符号在sed命令中代表上次匹配的结果
sed 's/第二行/已经不是&/g' 123.txt


11、删除第3到第9行,只是不显示而已
sed '3,9d' 123.txt


12、删除包含"start"的行到包含"999"的行之间的行
sed '/start/,'/999'/d' 123.txt


13、-e是编辑命令,用于多个编辑任务
打印1到2行的内容,并匹配‘第二行替换为'我是第三行了'
sed -e '1,2d' -e 's/第二行/我是第一行了/g' 123.txt


14、-r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上
sed '/3333/ r test002.txt' 123.txt
【123.ltxt 匹配root后读入test002.txt的内容(helloworld123:)在匹配内容之下,仅显示用】


15、-w是写入命令
将【123.txt匹配root后写入test002.txt',真实写入,,添加-n参数后,不打印源文件】
sed '/第二行/ w test002.txt' 123.txt

16、sed的正则匹配
正则匹配IP和子网掩码
ifconfig | sed -n '2p'


ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'(提取ID地址)


find . -name "*.txt" | xargs sed -i 's/第二行/第三行/g'(配合find命令使用:查找并替换)
