本文共 2876 字,大约阅读时间需要 9 分钟。
一、sed工具
匹配:
sed -n '/root/'p 1.txt 匹配出有root的行并显示出来sed -n '/r +t/'p 1.txt r后面有个脱义,-r就免脱义它等于 sed -nr '/r+t/p 1.txtsed -n '/^1/'p 1.txt 匹配出以1开头的行sed -n '/r..o/'p 1.txt 匹配出r跟o之间存在的两个任意字符的行[root@riven ~]# sed -n '/root/'p 1.txtroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[root@riven ~]# sed -n '/^1/'p 1.txt1sync:x:5:0:sync:/sbin:/bin/sync1shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown1halt:x:7:0:halt:/sbin:/sbin/halt111111111111111111[root@riven ~]# sed -n '/r..o/'p 1.txtoperator:x:11:0:operator:/root:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologin
sed -n '2'p 1.txt 打印第二行
sed -n '2,5'p 1.txt 打印2至5行sed -n '15,$'p 1.txt 打印2至最未行sed -n '1,$'p 1.txt 打印全部行[root@riven ~]# sed -n '1'p 1.txtroot:x:0:0:root:/root:/bin/bash[root@riven ~]# sed -n '2,5'p 1.txtbin: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[root@riven ~]# sed -n '25,$'p 1.txtriven:x:1000:1000::/home/riven:/bin/bashtest:x:1003:1001::/home/test:/bin/bashuser2:x:1004:1004::/home/user2:/bin/bashhttpd:x:1005:1012::/home/httpd:/bin/nologinapache:x:48:48:Apache:/usr/share/httpd:/sbin/nologinsaslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin[root@riven ~]# sed -n '1,$'p 1.txt
-e 我在同一个表达式里面,我不仅要匹配还要打印出来,就是做多个动作
sed -e '1'p -e '/root/'p -e '/oo/'p -e '/ro/'p -n 1.txt 同时执行匹配三个项
[root@riven ~]# sed -e '1'p -e '/root/'p -e '/oo/'p -e '/ro/'p -n 1.txtroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologin
sed -n 'ro'Ip 1.txt
sed '1,8'd 1.txt 除了前8行,把剩下的行列出来。不删除原文件;
sed -i '/user/'d 1.txt 删除文件里面所有user字符
sed '1,10s/root/toor/g' 1.txt :把1-10行的所有root替换成toor ,g:全局替换,如果不加g只替换该行出现的第一个
sed r '1,10s/ro+/rt/g' 1.txt
head 1.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
我们把前10行调换第一段跟最后一段替换位置,s 替换命令,([^:]+)非:的字符,如果sed用()一定要用-r选项: 分隔符,(我们把这一段,中间一段,最后一段)\1 代表第一个()\2 代表第二个()\3 代表第三个()因为我们要把最后一段跟最前一段进行调换,那么我们就要进行调换。head 1.txt |sed 's/\/root/123/g' 把/root/替换成123,如果有/,那么我们就得脱义。
head 1.txt |sed 's//sbin/nologin/123/g' 把/sbin/nologin 替换成123,因为里面存在多个/,那我们就得脱义,得写成:head 1.txt |sed 's/\/sbin\/nologin/g 或者写成 head 1.txt |sed 's@/sbin/nologin@g' 或者我们用#代替/
head 1.txt |sed 's/[a-zA-Z]//g' 删除文档里面所有字母。
head 1.txt |sed -r 's/(.*)/aaa:&/'把所有行的前面加上一个字符串aaa, 使用小括号(),一定要加-r选项,小括号()里面的内容,我们可以用\1或者& 表示。一定要多多练习grep ,sed ,awk ;多练才有效果!!!
转载于:https://blog.51cto.com/10690709/2108376