复制代码代码如下: [zhangy@BlackGhost mytest]# cat test | sed -ne "2,8s/zhang/ying/gp" -ne"5,10s#dbus#goodbay#gp" yingy:x:1000:100:,,,:/home/yingy:/bin/bash goodbay:x:81:81:System message bus:/:/bin/false
例h,正则的用法,在sed里面用括号的话要加上的,不然会报错的。
复制代码代码如下: [zhangy@BlackGhost mytest]# sed -ne "2,8s/^(zhangy)/1ing/gp" test zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash [root@masters ~]# sed -ne "2,8s/^(zhangy)/&ing/gp" test zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash
例i,&的用处是,在找到的字符串后加上&后面的字符串,zhang后都加上了ying
复制代码代码如下: [zhangy@BlackGhost mytest]# sed -ne "2,15s/zhang/&ying/gp" test zhangyingy:x:1000:100:,,,:/home/zhangyingy:/bin/bash ba:x:1002:1002::/home/zhangyingy:/bin/bash @zhangyingying:*:1004:1004::/home/test:/bin/bash
例j,这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换
复制代码代码如下: [zhangy@BlackGhost mytest]# sed -ne "/^zhang/,/Po/s/zhang/ying/gp" test yingy:x:1000:100:,,,:/home/yingy:/bin/bash ba:x:1002:1002::/home/yingy:/bin/bash @yingying:*:1004:1004::/home/test:/bin/bash
例k,n;这里的n是next的缩写,找到root的行后,将其下一行的中的bin换成tank
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed"/root/{n;s/bin/tank/}" test root:x:0:0:root:/root:/bin/bash tank:x:1:1:bin:/bin:/bin/false
例m,y的作用是将匹配的字符换成大写,不过替换字符和被替换字符长度要一样
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "1,2y/root/ROOT/" test ROOT:x:0:0:ROOT:/ROOT:/bin/bash bin:x:1:1:bin:/bin:/bin/false
例n,h的作用是将找到的行,放到一个缓存区,G的作用是将缓存区中的内容放到最后一行
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "/root/h" -e "$G" test ................................ ............................. ba:x:1002:1002::/home/zhangy:/bin/bash test:x:1003:1003::/home/test:/bin/bash @zhangying:*:1004:1004::/home/test:/bin/bash root:x:0:0:root:/root:/bin/bash
复制代码代码如下: [zhangy@BlackGhost mytest]# sed -ne "/^zhang/,/Po/s/zhang/ying/gp" test yingy:x:1000:100:,,,:/home/yingy:/bin/bash ba:x:1002:1002::/home/yingy:/bin/bash @yingying:*:1004:1004::/home/test:/bin/bash
例q,3q的意思是到第三行的时候,退出
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "s/bin/tank/g;3q" test root:x:0:0:root:/root:/tank/bash tank:x:1:1:tank:/tank:/tank/false daemon:x:2:2:daemon:/stank:/tank/false
复制代码代码如下: [zhangy@BlackGhost mytest]# sed -ne "2,15s/zhangy.*[[:digit:]]/=======/gp"test =======:,,,:/home/zhangy:/bin/bash @=======::/home/test:/bin/bash
例2 例a,删除1,14行
复制代码代码如下: [zhangy@BlackGhost test]$ sed -e "1,14d" test @zhangying:*:1004:1004::/home/test:/bin/bash policykit:x:102:1005:Po
例b,删除4以后的行,包括第4行,把$当成最大行数就行了。
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "4,$d" test root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false
例c,删除包括false的行,或者包括bash的行,别忘了加
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "/(false|bash)$/d" test policykit:x:102:1005:Po
例d,删除从匹配root的行,到匹配以test开头的行,中间的行
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "/root/,/^test/d" test @zhangying:*:1004:1004::/home/test:/bin/bash policykit:x:102:1005:Po
例3 例a,读取test2的内容,并将其写入到匹配行的下面
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed -e "/^root/r test2" test root:x:0:0:root:/root:/bin/bash ============= ------------- +++++++++++++ bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false
例b,将匹配数字的行,写入test2中
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed "/[[:digit:]]/w test2" test
例c,将要插入的东西,插入匹配行的下面
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed"/root/a\ ===aaaa====" test root:x:0:0:root:/root:/bin/bash ===aaaa==== bin:x:1:1:bin:/bin:/bin/false
例d,正好根a相反,将要插入的东西,插入到匹配行的上面
复制代码代码如下: [zhangy@BlackGhost mytest]$ sed "/^daemon/i\=================" test root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false ================= daemon:x:2:2:daemon:/sbin:/bin/false mail:x:8:12:mail:/var/spool/mail:/bin/false