Linux正则表达式sed 详述

sed、awk工具可以实现文本替换并且把替换的文本输出到屏幕上sed和awk都是流式编辑器,是针对文档的行来操作的。sed通常用来替换操作。

示例的文本内容,以下操作根据此文本。[root@linuxidc ~]# cat test.txt rot:x:0:0:rot:/rot:/bin/bashroot:x:0:0:root:/root:/bin/bashdaemon:x:2:2:daemon:/sbin:/sbin/nologinrooooot:x:0:0/roooooot:/bin/bash11111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

1、打印某一行sed -n ‘n’p filename 单引号内的n是一个数字,表示第几行;p也可以写到引号内;

示例,打印passwd第3-5行;

[root@linuxidc ~]# sed -n ‘3,5’p /etc/passwd daemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打印所有行

[root@linuxidc ~]# sed -n ‘1,$’p /etc/passwd

打印某一行,并且要显示行号,,需要和grep一起使用;

[root@localhost ~]# grep -n ‘.*’ test.txt | sed -n ‘1’p 1:rrt

2、打印包含某个字符串的行

字符串需要用/ /括起来;grep中的特殊符号^ $ . * 同样适用于sed中。[root@linuxidc ~]# sed -n ‘/root/’p /etc/passwd root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin

打印包含/sbin/nologin的行,/需要进行脱意;[root@linuxidc ~]# sed -n ‘/\/sbin\/nologin/’p passwd bin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打印以d开头的行;打印以in结尾的;打印r与o字母中间有2个任意字符的;打印包含2个o及多个o的行;[root@linuxidc ~]# sed -n ‘/^d/’p test.txt daemon:x:2:2:daemon:/sbin:/sbin/nologin[root@linuxidc ~]# sed -n ‘/in$/’p test.txt daemon:x:2:2:daemon:/sbin:/sbin/nologin[root@linuxidc ~]# sed -n ‘/r..o/’p test.txt rooooot:x:0:0/roooooot:/bin/bash[root@linuxidc ~]# sed -n ‘/ooo*/’p test.txt root:x:0:0:root:/root:/bin/bashrooooot:x:0:0/roooooot:/bin/bash

3、-e可以实现多个行为[root@linuxidc ~]# sed -e ‘1’p -e ‘/111/’p -n test.txt rot:x:0:0:rot:/rot:/bin/bash11111111111111111111111111111111

可以用-e写多个;-e相当于传送带,先匹配最前面的打印,再匹配后面的打印,所以第一行会打印2次;

[root@localhost ~]# sed -e ‘/root/p’ -e ‘/bash/p’ -n 1.txt root:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinuser1:x:500:500::/home/user1:/bin/bashuser2:x:501:501::/home/user2:/bin/bash

-e后面也可以用;分号;-n不能写到-e的后面,可以写在-e的前面或最后面;[root@localhost ~]# sed -e ‘/root/p;/bash/p’ -n 1.txt root:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinuser1:x:500:500::/home/user1:/bin/bashuser2:x:501:501::/home/user2:/bin/bash

4、删除某行或者多行

‘d’ 这个字符就是删除的动作了,不仅可以删除指定的单行以及多行,而且还可以删除匹配某个字符的行,另外还可以删除从某一行一直到文档末行。

示例,删除第一行;删除1-3行;删除包含root关键词的行;删除第3行到最后一行所有行;[root@linuxidc ~]# sed ‘1’d test.txt root:x:0:0:root:/root:/bin/bashdaemon:x:2:2:daemon:/sbin:/sbin/nologinrooooot:x:0:0/roooooot:/bin/bash11111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@linuxidc ~]# sed ‘1,3’d test.txt rooooot:x:0:0/roooooot:/bin/bash11111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@linuxidc ~]# sed ‘/root/’d test.txt rot:x:0:0:rot:/rot:/bin/bashdaemon:x:2:2:daemon:/sbin:/sbin/nologinrooooot:x:0:0/roooooot:/bin/bash11111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@linuxidc ~]# sed ‘3,$’d test.txt rot:x:0:0:rot:/rot:/bin/bashroot:x:0:0:root:/root:/bin/bash

5、替换字符或替换字符串

示例,替换第一行字母r为R;替换1-2行中ot为to;替换所有行中ot为to;[root@localhost ~]# sed ‘1s/r/R/g’ test.txt RRt [root@linuxidc ~]# sed ‘1,2s/ot/to/g’ test.txt rto:x:0:0:rto:/rto:/bin/bashroto:x:0:0:roto:/roto:/bin/bashdaemon:x:2:2:daemon:/sbin:/sbin/nologinrooooot:x:0:0/roooooot:/bin/bash11111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@linuxidc ~]# sed ‘s#ot#to#g’ test.txt rto:x:0:0:rto:/rto:/bin/bashroto:x:0:0:roto:/roto:/bin/bashdaemon:x:2:2:daemon:/sbin:/sbin/nologinrooooto:x:0:0/roooooto:/bin/bash11111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

与vim编辑器里面替换一样的命令格式,s代表替换,g代表全局,不加g的话只替换行的第一个;可以使用# @作为分隔符。

1s代表只替换第一行;1,3s代表第一行到第三行;不加行数的话默认为全部行。

示例,删除文档中所有的数字’s/[0-9]//g’ 如删除文档中所有的字母’s/[a-zA-Z]//g’删除所有的数字和字母’s/[0-9a-zA-Z]//g'[root@linuxidc ~]# sed ‘s/[0-9]//g’ test.txt rot:x:::rot:/rot:/bin/bashroot:x:::root:/root:/bin/bashdaemon:x:::daemon:/sbin:/sbin/nologinrooooot:x::/roooooot:/bin/bashaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

示例,删除文档中所有的字母[root@linuxidc ~]# sed ‘s/[a-z]//g’ 1.txt ::0:0:/://::11:0::/://::11:0::/://::0:0:/://1111111111111111111111111111111

车到山前必有路,没路可以先开路,开路就得有乐观,

Linux正则表达式sed 详述

相关文章:

你感兴趣的文章:

标签云: