參數linux
-n 取消默認輸出 -i 修改源文件內容 -r 支持擴展正則 -e 容許多項編輯
顯示行號shell
grep -n . /etc/passwd cat -n /etc/passwd sed "=" /etc/passwd awk '{print NR,$0}' /etc/passwd less -N /etc/passwd
打印文件第幾行 nruby
#顯示單行 [root@lb03 ~]# sed -n '1p' passwd root:x:0:0:root:/root:/bin/bash #顯示連續的多行 [root@lb03 ~]# sed -n '1,3p' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin #顯示不連續的多行 [root@lb03 ~]# sed -n '1p;3p' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@lb03 ~]# sed -n '$p' passwd rlgrtueigh
過濾bash
#過濾以root開頭 [root@lb03 ~]# sed -n '/^root/p' passwd root:x:0:0:root:/root:/bin/bash roott [root@lb03 ~]# sed -n '/^ROOT/p' passwd ROOT #過濾以t爲結尾的行 [root@lb03 ~]# sed -n '/t$/p' passwd halt:x:7:0:halt:/sbin:/sbin/halt roott #過濾出字符連續的行 [root@lb03 ~]# sed -n '/adm/,/ftp/p' passwd adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin #取出不一樣的字符串 [root@lb03 ~]# sed -n '/adm/p;/ftp/p' passwd adm:x:3:4:adm:/var/adm:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@lb03 ~]# sed -rn '/adm|ftp/p' passwd adm:x:3:4:adm:/var/adm:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
刪除文件第幾行 dless
sed '2,4d' /etc/passwd 刪除2-4行 sed '2,$d' /etc/passwd 刪除2-末尾行 sed '2d,4d' /etc/passwd 刪除2行和4行 sed '1,$d' /etc/passwd 全刪 sed '/root/{n;d}' /etc/passwd 刪除root下一行 sed '/bin/{N;d}' /etc/passwd 刪除bin上一行
追加,插入 a issh
'a' 第三行下方追加oldboy [root@shell /server/scripts]# sed '3a oldboy' pass root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin oldboy adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 'i' 第三行上方追加alex [root@shell /server/scripts]# sed '3i alex' pass root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin alex 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 #在文件的開頭添加內容 [root@lb03 ~]# sed '1s/^/oldboy\n/' test.txt oldboy root:x:0:0:root:/root:/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 #在文件的結尾加入內容 [root@lb03 ~]# sed '$s/$/\noldgirl/' test.txt root:x:0:0:root:/root:/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 sync:x:5:0:sync:/sbin:/bin/sync oldgirl
替換 ccode
'c' 第四整行替換爲mmmmmmmm [root@shell /server/scripts]# sed '4c mmmmmmmm' pass root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin mmmmmmmm lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin #包含root的行所有替換爲admin [root@lb03 ~]# sed '/root/cadmin' test.txt 's###g' 將lp行的nologin換成ss [root@shell /server/scripts]# sed '/lp/s#nologin#ss#g' pass root:x:0:0:root:/root:/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/ss 將adm行的sbin換成yy (有-n 就加p) [root@shell scripts]# sed -n '/adm/s#sbin#yy#gp' pass adm:x:3:4:adm:/var/adm:/yy/nologin #替換多行 s###g [root@lb03 ~]# sed '1,5s#bin#shell#g' test.txt root:x:0:0:root:/root:/shell/bash shell:x:1:1:shell:/shell:/sshell/nologin daemon:x:2:2:daemon:/sshell:/sshell/nologin adm:x:3:4:adm:/var/adm:/sshell/nologin lp:x:4:7:lp:/var/spool/lpd:/sshell/nologin sync:x:5:0:sync:/sbin:/bin/sync #只替換每一行第一個匹配的 s### [root@lb03 ~]# sed '1,5s#bin#shell#' test.txt root:x:0:0:root:/root:/shell/bash shell:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sshell:/sbin/nologin adm:x:3:4:adm:/var/adm:/sshell/nologin lp:x:4:7:lp:/var/spool/lpd:/sshell/nologin sync:x:5:0:sync:/sbin:/bin/sync #忽略大小寫替換 i [root@lb03 ~]# sed 's#root#admin#gi' test.txt admin:x:0:0:admin:/admin:/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 sync:x:5:0:sync:/sbin:/bin/sync 'n N' 匹配到root下一行 而後替換 [root@shell /server/scripts]# sed '/root/{n;s#sbin#msy#g}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/msy/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
==案例==:註釋定時任務server
sed -n '/ntpdate/s#^###gp' /var/spool/cron/root sed -n '2/s#^###gp' /var/spool/cron/root 把第二行註釋了
==案例==:關閉selinuxblog
[root@lb03 ~]# sed '7cSELINUX=enforcing' /etc/sysconfig/selinux [root@lb03 ~]# sed '/^SELINUX=/cSELINUX=enforcing' /etc/sysconfig/selinux
==案例==:更改端口ip
[root@lb03 ~]# sed '/^#Port/cPort 666' /etc/ssh/sshd_config [root@lb03 ~]# sed '17cPort 666' /etc/ssh/sshd_config
將內容寫到新的文件中 w
[root@lb03 ~]# sed -n '/root/w file.txt' passwd [root@lb03 ~]# cat file.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin roott [root@lb03 ~]# sed -n '1w file1.txt' passwd [root@lb03 ~]# cat file1.txt root:x:0:0:root:/root:/bin/bash
容許多項編輯 e
[root@lb03 ~]# sed '1,10d' passwd |sed 's#root#123#g' [root@lb03 ~]# sed -e '1,10d' -e 's#root#123#g' passwd
非 !
[root@lb03 ~]# sed -n '1!p' passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@lb03 ~]# sed '1!d' passwd root:x:0:0:root:/root:/bin/bash
暫存和取用 h H g G
'h' 取第一行放暫存區 替換最後一行 [root@shell /server/scripts]# sed '1h;$g' pass root:x:0:0:root:/root:/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 root:x:0:0:root:/root:/bin/bash 取第二行放暫存區 替換第三行 [root@shell /server/scripts]# sed '2h;3g' pass root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 'G' 把第一行放到暫存區 在最後一行調用 (不是替換,是追加) [root@shell /scripts]# sed '1h;$G' pass root:x:0:0:root:/root:/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 root:x:0:0:root:/root:/bin/bash '{h}' 把第一行內容放暫存區並刪除 最後一行調用 [root@shell /server/scripts]# sed -r '1{h;d};$G' pass 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 root:x:0:0:root:/root:/bin/bash 'g' 把第一行放暫存區 從第二行到最後一行替換 [root@shell /server/scripts]# sed -r '1h;2,$g' pass root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash 'H' [root@shell /server/scripts]# sed -r '1h;2,3H;$G' pass root:x:0:0:root:/root:/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 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
在有空格等的文件中所有加註釋
[root@lb03 ~]# cat file.txt root:x:0:0:root:/root:/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 sync:x:5:0:sync:/sbin:/bin/sync # shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt #####mail:x:8:12:mail:/var/spool/mail:/sbin/nologin #operator:x:11:0:operator:/root:/sbin/nologin [root@lb03 ~]# sed 's/^[ \t#]*/#/g' file.txt #root:x:0:0:root:/root:/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 #sync:x:5:0:sync:/sbin:/bin/sync #shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown #halt:x:7:0:halt:/sbin:/sbin/halt #mail:x:8:12:mail:/var/spool/mail:/sbin/nologin #operator:x:11:0:operator:/root:/sbin/nologin
sed 後向引用
所有註釋
[root@shell /server/scripts]# sed 's/.*/#&/g' acce = sed -r 's/(.*)/#\1/g' passwd (.*:全部字符 #&:註釋並執行.* 若是不加# 就會默認所有替換成# 就是一例#) #\1:換成# 第一個括號裏的值 #當前IP爲:111.78.80.213 對應出現的次數是: 2 #當前IP爲:42.114.204.31 對應出現的次數是: 1 #當前IP爲:101.132.102.45 對應出現的次數是: 22 [root@shell /server/scripts]# sed 's/.*/&/g' acce = sed -r 's/(.*)/\1/g' acce (.*:全部字符 \1:第一個括號的值) 當前IP爲:111.78.80.213 對應出現的次數是: 2 當前IP爲:42.114.204.31 對應出現的次數是: 1 當前IP爲:101.132.102.45 對應出現的次數是: 22
==案例==:取ip地址
[root@shell /server/scripts]# ip a s eth0 s是指定網卡 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group link/ether 00:0c:29:55:c6:31 brd ff:ff:ff:ff:ff:ff inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe55:c631/64 scope link valid_lft forever preferred_lft forever [root@lb03 ~]# ip a s eth0 |sed -nr '3s#(.*t )(.*)(/.*)#\2#gp' 10.0.0.3 -n 取消默認輸出 -r 支持擴展正則 3 s#(.*t ) (.*) (/.*)# \2#gp 第3行 開始到空格結束 輸出剩餘 從/開始到結束 值是第2個括號裏的
==案例==:把passwd文件中的第一列與第七列進行位置調換
[root@lb03 ~]# sed -r 's#(.*)(:x.*:)(.*)#\3\2\1#g' passwd /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
sed -r 's#(.*)#\1 alex#g' 1.txt echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1;`echo $RANDOM|md5sum|cut -c1-8`|passwd --stdin \1#g'