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
查看文件text的2-4行的内容
[root@linux Desktop]# sed  -n '2,4p'  text
b
c
d



实验动作d
删除文件text的3-5行
[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
向text文件第二行前插入suv字符
[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
把文件text的3行的内容换成 MM GG
[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
在text文件的第三行,第四行删掉
[root@linux Desktop]#cat text
a
b
c
d
e


[root@linux Desktop]# sed -e '4d ; 5d'   text
a
b
c



提升
把text文件注释每一行
[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
posted @ 2020-11-14 16:48  加油酱  阅读(261)  评论(0编辑  收藏  举报