20151201正则第三部分(sed) 最强的功能是替换!

来源:互联网 发布:nginx代理上网 编辑:程序博客网 时间:2024/06/14 03:29
正则第三部分:

1.打印指定行
sed '10p' -n 1.txt
sed '1,4p' -n 1.txt
sed '5,$p' -n 1.txt  
2.打印包含某个字符串的行 
sed -n '/root/p' 1.txt 
可以使用 ^ . * $等特殊符号
3.-e 可以实现同时进行多个任务 
sed -e '/root/p' -e '/body/p' -n 1.txt 也可以用;实现  sed  '/root/p; /body/p' -n 1.txt
4.删除行 
 sed '/root/d' 1.txt      删除带有root的行
 sed '1d' 1.txt               删除第1行
 sed '1,10d' 1.txt          删除第1到10行
5.替换 (最强)
sed '1,2s/ot/to/g' 1.txt, 其中s就是替换的意思,g为全局替换,否则只替换第一次的,/也可以为 #, @ 等

6.删除所有数字 ,替换(特殊用法)
 sed 's/[0-9]//g' 1.txt
删除所有非数字  sed 's/[^0-9]//g' 1.txt

调换两个字符串位置 head -n2 1.txt |sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/'
直接修改文件内容 sed -i 's/ot/to/g' 1.txt



测试如下:
主要的功能
1.1查找:
[root@niejicai-linux ~]# sed '1p' -n 1.txt                            打印第一行(输出第一行)
root:x:0:0:root:/root:/bin/bash
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '1p' -n       打印输出第1行,并且打印出行号
1:root:x:0:0:root:/root:/bin/bash
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '1,5p' -n           打印输出第1行到第5行,以及行号
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '5,$p' -n
 打印输出从第5行到最后一行与行号
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.......
44:user42:x:5561:500::/home/user42:/bin/bash
46:user0:x:5563:5563::/home/user0:/bin/bash
[root@niejicai-linux ~]# sed -n '4,$p' 1.txt              这个也是打印出从第4行到最后一行
adm:x:3:4:adm:/var/adm:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.........
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '/root/p' -n             打印出带有root的行并且显示行号
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
40:root      
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed -r 'root|mysql/p'-n       这里或者|也可以打印出来 并且显示行号  ,-r不需要加脱译(不需要转译)
1:root:x:0:0:root:/root:/bin/bash 
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
...............
46:user0:x:5563:5563::/home/user0:/bin/bash
[root@niejicai-linux ~]# grep -n '.*' 1.txt | sed -r '/(oo)+/p' -n    
1:root:x:0:0:root:/root:/bin/bash
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11:operator:x:11:0:operator:/root:/sbin/nologin
26:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
37:roooooot
40:root

1.2匹配:
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed -e '/root/p' -e '/mysql/p' -n                  -e 可以实现同时进行多个任务 
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
40:root
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '/root/p;/mysql/p' -n                                -e 可以实现同时进行多个任务 ,也可以用;号
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
40:root
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed -r  '/ro[o|t]t/p' -n     这里的|不是或的意思,这样表示o,|,t三选一。
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
40:root
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '10,$d'                 删除第10行到最后一行
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed -r '/root|mysql/d'       把带有root或者mysql的行删除去
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
12:games:x:12:100:games:/usr/games:/sbin/nologin
13:gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed -r '/[0-9]/d'        删除带有数字开头的行

1.3替换

[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed 's/root/toor/g'    把root替换成toor
1:toor:x:0:0:toor:/toor:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
..........
46:user0:x:5563:5563::/home/user0:/bin/bash
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed '1,10s/root/toor/g'  还可以指定行,1到10行,进行把root替换成toor
1:toor:x:0:0:toor:/toor:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
..................
46:user0:x:5563:5563::/home/user0:/bin/bash

[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed 's/[0-9]//g'            把数字删除
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
...............
:user:x:::user,ddddddddddd,aaaaaaaaaaa,:/home/user:/bin/bash
:user:x::::/home/user:/bin/bash
[root@niejicai-linux ~]# grep -n '.*' 1.txt |sed 's/[^0-9]//g'          把非数字删除
100
211
322
...........
[root@niejicai-linux ~]# head 1.txt |sed -r 's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'    主要是练逻辑能力,平时用了很少。
                                                  root:x:0:0:root:/root:/bin/bash
                                                   1                                         2
                                                    把1和2调换过来
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:10:14:uucp:/var/spool/uucp:uucp
[root@niejicai-linux ~]#

0 0
原创粉丝点击