sed命令——用来对文件数据的 选取、替换、删除
sed格式: sed 选项 '动作' 文件名 文件内容
选项
-n 不加-n则打印文件全部数据 ; 命令加上-n,系统只会输出 sed处理后的文件数据;
-p 打印第几行
-e 允许使用多条sed命令编辑文件数据
-r 支持正则表达式
-i sed直接修改文件数据,不输出到屏幕
动作
a \ 行追加,在当行后插入一行或多行,
c \ 行替换 共有属性除最后一行,其他都要加
i \ 插入,在当行前插入一行或多行。
d 删除指定的行
s 字符替换 格式:"行范围s/used/new/g"
查找匹配
. 单字通配符
[0-9] 匹配0-9
[^a-z] 不匹配a-z的所有其它字符
“.*” 匹配””内任何字符串
^ 匹配行开始
$ 匹配行结束
元字符集,匹配符
^ 锚定行的开始. 如/^sed/ 匹配所有以sed开头的行
$ 锚定行的结束. 如/sed$/ 匹配所有以sed结尾的行
. 匹配一个非换行符. 如/sed/ 匹配s后接一个任意字符然后是d
" * " 匹配零或多个字符. 如/sed/ 匹配所有模块是一个或多个空格后紧跟sed的行
[] 匹配一个制定范围内的字符如. /[Ss]ed/ 匹配sed和Sed
[^] 匹配一个不在制定范围内的字符. 如/[^A-RT-Z]ed/ 匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行
(..) 保存匹配的字符. 如s/(love)able/\1rs loveable被替换成lovers
& 保存搜索字符用来替换其它字符. 如s/love/&/ love这成love
< 锚定单词的开始. 如/\> 锚定单词的结束. 如/love>匹配包含以love结尾的单词行
x{m} 重复字符x,m次. 如/o{5}匹配包含5个o的行
x{m,} 重复字符x,至少m次. 如 /o{5,}/匹配至少有5个o的行
x{m,n} 重复字符x,至少m次.把多余n次. 如 /o{5,10}/匹配5-10个o的行
实验sed -p |
查看文件text的第二行
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed ‘2p’ text
a
b
b
c
d
e
[root@linux Desktop]# sed -n '2p' text
b
实验 sed -n |
[root@linux Desktop]# sed -n '2,4p' text
b
c
d
实验动作d |
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed '3,5d' text
a
b
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed -i '3,5d' text
[root@linux Desktop]# cat text
a
b
删除文件text的2行至末尾
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed '2,$d' text
[root@linux Desktop]# cat text
a
删除文件text第二行,并显示行号
[root@linux Desktop]# nl text |sed '2d'
1 a
3 c
4 d
5 e
注:sed不加i,只是改了从模式空间(pattern space)的打印内容,并没有真实地修改原文件
实验动作a |
向text文件第二行后插入suv字符
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed '2a suv ' text
a
b
suv
c
d
e
实验动作i |
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed '2i suv' text
a
suv
b
c
d
e
向text文件第二行**前**插入"suv"行,插入"Tom"行,插入"Lisa"行
[root@linux Desktop]# sed '2i suv \
Tom\
> Lisa' text
a
suv
Tom
Lisa
b
c
d
e
实验动作c |
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed '3c MM GG' text
a
b
MM GG
d
e
[root@linux Desktop]# sed '3c MM\
> GG' text
a
b
MM
GG
d
e
实验动作s |
把text文件中的第三行中 字符c换成suv
[root@linux Desktop]#cat text
a
b
MMcGG
d
e
[root@linux Desktop]# sed '3s/c/suv/g' text
a
b
MMsuvGG
d
e
sed -e |
[root@linux Desktop]#cat text
a
b
c
d
e
[root@linux Desktop]# sed -e '4d ; 5d' text
a
b
c
提升 |
[root@linux Desktop]# cat text
a
b
c
d
e
[root@linux Desktop]# sed '1,5s/^/#/g' text
#a
#b
#c
#d
#e
把text文件的MM GG 字符串删除
[root@linux Desktop]# cat text
a tom make
b MM jake
c hims lisa
d lina GG
e gouta bide
[root@linux Desktop]# sed ' 2s/MM//g ; 4s/GG//g 'text
a tom make
b jake
c hims lisa
d lina
e gouta bide