shell脚本基础:正则表达式sed

描述

在字符串处理中,最重要的就是查找和替换。

 

sed [选项] 处理脚本 输入文件...

 

字符串

-r是用于在sed命令中使用扩展正则表达式的选项。如果没有指定选项,sed命令会默认将基本正则表达式视为正则表达式。

-e选项用于为sed命令设置要执行的处理脚本。如果没有指定任何选项,sed命令会将第1个非选项的参数作为处理脚本来运行。例如指定多个处理脚本

 

$ sed -e 's/:/,/g' -e 's/bin//g' /etc/passwd
root,x,0,0,root,/root,//bash
,x,1,1,,/,/s/nologin
daemon,x,2,2,daemon,/s,/s/nologin
adm,x,3,4,adm,/var/adm,/s/nologin
lp,x,4,7,lp,/var/spool/lpd,/s/nologin
sync,x,5,0,sync,/s,//sync
……以下省略……

 

-i选项的后面指定一个字符串参数,sed命令还会对编辑之前的原文件备份

例如将:(冒号)替换为_(下划线)

 

$ sed 's/:/_/g' /etc/passwd

 

在上面的示例中,处理脚本s/:/_/并没有使用地址。如果像这样省略了地址,则文件的全部内容都会成为处理对象。

字符串

例如第2-4行作为命令的处理对象

 

$ sed '2,4s/:/_/g' /etc/passwd

 

▼使用s命令将匹配到指定模式的内容删除

“替换后字符串”也可以是空字符串。这就相当于删除匹配到的部分,s命令末尾的标志是可以控制替换操作的符号,常用的主要是g和i。标志g表示对匹配到匹配模式的所有结果进行替换。i就代表匹配到的第一行。

如果不需要使用任何标志,则标志部分可以省略。此外,如果要同时使用多个标志,可以像ig或gi这样以任意的顺序指定多个标志。

使用/对/字符进行转义

 

$ sed 's//bin///usr/bin//g' /etc/passwd
root:x:0:0:root:/root:/usr/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
……

 

使用%作为分隔符

 

$ sed 's%/bin/%/usr/bin/%g' /etc/passwd
root:x:0:0:root:/root:/usr/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
……

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分