sed是一种流编辑器,流编辑器会在编辑器处理数据以前基于预先提供的一组规则来编辑数据流。正则表达式
sed编辑器能够根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。express
sed的工做流程主要包括读取、执行和显示三个过程:bash
在全部的文件内容都被处理完成以前,上述过程将重复执行,直至全部内容被处理完。
注意:默认状况下全部的sed命令都是在模式空间内执行的,所以输入的文件并不会发生任何变化,除非是用重定向存储输出。编辑器
命令格式:优化
sed -e
'格式'
文件1 文件2 ...
uised -n -e ‘操做’ 文件1 文件2 ...
sed -f 脚本文件 文件1 文件2 ...
sed -i -e
'操做'
文件1 文件2 ...
sed -e ' n {
操做1
操做2
...
} ' 文件1 文件2
-e或- -expression=: 表示用指定命令来处理输入的文本文件,只有一个操做命令时可省略,一 般在执行多个操做命令使用spa
f或- -file=: 表示用指定的脚本文件来处理输入的文本文件。命令行
h或- -help: 显示帮助。3d
-n、- -quiet或silent:禁止sed编辑器输出,但能够与p命令一块儿使用完成输出。code
-i: 直接修改目标文本文件。
两个命令相同但下面这个加个-e
s:替换,替换指定字符。
d:删除,删除选定的行。
a:增长,在当前行下面增长一行指定内容。
i:插入,在选定行,上面插入一行指定内容。
c: 替换,将选定行替换为指定内容。
y:字符转换,转换先后的字符长度必须相同。
p: 打印,若是同时指定行,表示打印指定行;若是不指定行,则表示打印全部内容;若是有非打印字符,则以ASCII码输出。其一般与“-n”选项一块儿使用
1
2
3
4
5
6
|
[root@localhost d3]#sed -n
'p'
abc.txt
one
two
three
four
five
|
=: 打印行号
1
2
3
4
5
6
|
[root@localhost d3]#sed -n
'='
abc.txt
1
2
3
4
5
|
l (小写L):打印数据流中的文本和不可打印的ASCII字符(好比结束符$、制表符\t)
1
2
3
4
5
6
|
[root@localhost d3]#sed -n
'l'
abc.txt
one$
two$
three$
four$
five$
|
sed编辑器有2种寻址方式:
1
|
sed -n
'1p'
abc.txt #打印第一行
|
1
|
sed -n
'$p'
abc.txt #打印最后一行
|
1
|
sed -n
'1,3p'
abc.txt #打印一到三行
|
1
|
sed -n
'3,$p'
abc.txt #打印三到最后一行
|
1
|
sed -n
'1, +3p'
abc.txt #打印1以后的连续3行,即1-4行
|
1
|
sed
'3q'
abc.txt #打印前3行信息后退出,q表示退出
|
1
|
sed -n
'p;n'
abc.txt #打印奇数行; n表示移动到下一行
|
1
|
sed -n
'n;p'
abc.txt #打印偶数行
|
1
|
sed -n
'2,${n;p}'
abc.txt #从第二行开始,n移动下一行,p打印,表示打印奇数行
|
1
|
sed -n
' /user/p'
/etc/passwd #
//搜索包含user的行进行打印,区分大小写
|
1
|
sed -n
' /^a/p'
/etc/passwd #搜索以a开头的行进行打印
|
1
|
sed -n
'/bash$/p'
/etc/passwd #打印以bash结尾的行
|
1
|
sed -n
'/ftp\|root/p'
/etc/passwd #搜索包含ftp或者root的行进行打印
|
1
|
sed -n
'2,/nobody/p'
/etc/passwd #从第二行开始打印到包含nobody的行
|
1
|
sed -nr
'/ro{1,}t/p'
/etc/passwd #-r表示支持正则表达式
|
1
2
3
4
5
6
7
8
|
sed
'd'
abc.txt #不指定行号,所有删除
sed
'3d'
abc.txt #删除第三行
sed
'2,4d'
abc.txt #删除2-4行
sed
'$d'
abc.txt #删除最后一行
sed
'/^$/d'
abc.txt #删除空行
sed
'/nologin$/d'
/etc/passwd #删除包含nologin字符的行
sed
'/nologin$/!d'
/etc/passwd #不删除包含nologin的行
sed
'/2/,/3/d'
abc.txt #在出现2时,开启删除功能 出现3时,关闭删除功能
|
1
|
行范围 s/旧字符 /新字符 /替换标记
|
1
2
3
4
5
6
7
8
|
sed -n
's/root/admin/p'
/etc/passwd #将匹配行的第一个root更改成admin
sed -n
's/root/admin/2p'
/etc/passwd #将匹配行的第二个root更改成admin
sed -n
's/root/admin/gp'
/etc/passwd #将匹配行的全部root更改成admin
sed
'1,20 s/^/#/'
/etc/passwd #1-20行行首添加#号
sed
'^root/ s/$/#'
/etc/passwd #在以root开头的行,行尾添加#号
sed -f 123.sed 123.txt #-f以指定的脚本文件来处理输入文件
sed
'1,20w out.txt'
/etc/passwd #将1-20行的内容保存到
out
.txt文件中
sed -n
's/\bin\/bash\/bin\/csh/p'
/etc/passwd #删除字符时使用\
|
1
|
sed
'/55/c ABC'
123.txt #将含有55的行,替换为ABC
|
1
|
sed
'1,3a ABC'
123.txt #在第一行到第三行,行下插入ABC
|
1
|
sed
'1i ABC'
123.txt #在第一行,行上插入ABC
|
1
|
sed
'5r /etc/resolv.conf'
123.txt #在第五行后导入该文件内容
|
1
|
sed
'/root/{H;d};$G'
/etc/passwd #将包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后
|