# BEGIN這是處理數據以前運行的腳本 BEGIN { # 這是定義的變量,在如下其餘階段的腳本中也能夠調用,變量的調用方式如同shell中調用變量,可是不加$符號 separator1=" " FS=":" print "用戶名"separator1"密碼"separator1"用戶ID"separator1"組ID"separator1"用戶全名"separator1"主目錄"separator1"登陸shell"separator1} # 這是進行數據處理的腳本 { print $1 separator1 $2 separator1 $3 separator1 $4 separator1 $5 separator1 $6 separator1 $7 separator1 } # END這是數據處理最後要運行的腳本 END { print "==========================THE END=======================" }
指定方式爲:node
root@node1:~# gawk -f ./passwd.awk /etc/passwd
爲了防止與某些特定的字符相沖突,sed支持選擇其餘的字符進行分隔shell
sed 's!/bin/bash!/bin/csh' /etc/passwd
行尋址的使用格式bash
[address]command
也能夠把特定地址的多個命令放在一塊兒app
address{ command1 command2 command3 }
sed '2s/dog/cat/' data1' sed '2,21s/dog/cat/' data1' sed '2,$s/dog/cat/' data1'
sed '/admin/s/dog/cat' data2
root@node1:~# sed -n '2{s/daemon/admin/g;s/nologin/login/p}' /etc/passwd admin:x:1:1:admin:/usr/sbin:/usr/sbin/login
sed 'd' data2 #刪除data2中的全部記錄 sed '3d' data2 #刪除data2中第三行 sed '4,$d' data2 #刪除data2中第四行到最後的數據 sed '/line 1/d' data2 #刪除模式匹配到的行 sed '/1/,/2/d' data2 #匹配到第一個打開行刪除功能,匹配到第二個執行行刪除功能,並刪除兩個匹配到的行,若是第二個模式沒有被匹配到,那麼整個文件的數據都被刪掉了
i
在指定行前插入一個新行a
在指定行後插入一個新行root@node1:~# echo "line" | sed 'i\linedemo' linedemo line root@node1:~# echo "line" | sed 'a\linedemo' line linedemo
可是在數據流中須要指定要插入或者要追加的位置ide
root@node1:~# cat date2 line1 line2 line3 root@node1:~# sed '1i\demo' date2 demo line1 line2 line3 root@node1:~# sed '2a\demo' date2 line1 line2 demo line3 # sed '1i\first line' date2 # 老是插入在第一行 # sed '$a\end line' date2 # 老是追加在最後一行
root@node1:~# sed '3c\the change line' date2 line1 line2 the change line root@node1:~# sed '1,$c\the change line' date2 the change line root@node1:~# sed '1,2c\the change line' date2 the change line line3 root@node1:~# sed '/line1/c\the change line' date2 the change line line2 line3
# 前面的數字與後面的字母一對一的進行轉換,1映射到a root@node1:~# sed 'y/123/abc/' date2 linea lineb linec root@node1:~# sed '1,2y/123/abc/' date2 linea lineb line3
打印文本行大數據
root@node1:~# head -3 /etc/passwd | sed 'p' root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin root@node1:~# head -3 /etc/passwd | sed -n 'p' root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin
打印行號3d
root@node1:~# head -3 /etc/passwd | sed -n '=' 1 2 3 root@node1:~# head -3 /etc/passwd | sed '=' 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin 3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
列出行code
# 注意每行最後的一個$字符 root@node1:~# head -3 /etc/passwd | sed -n 'l' root:x:0:0:root:/root:/bin/bash$ daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin$ bin:x:2:2:bin:/bin:/usr/sbin/nologin$