1. 程式人生 > >sed和awk常用命令

sed和awk常用命令

sed常用

sed命令列格式為:
         sed [-nefri]  ‘command’  輸入文字/檔案        


常用選項:
        -n∶取消預設的輸出,使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來
        -e∶進行多項編輯,即對輸入行應用多條sed命令時使用. 直接在指令列模式上進行 sed 的動作編輯
        -f∶指定sed指令碼的檔名. 直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作
        -r∶sed 的動作支援的是延伸型正則表示式的語法。(預設是基礎正則表示式語法)
        -i∶直接修改讀取的檔案內容,而不是由螢幕輸出      


常用命令:
        a ∶ 新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
        c ∶ 取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行
        d ∶ 刪除,因為是刪除,所以 d 後面通常不接任何內容
         i ∶ 插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)
         p∶ 列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起用
         s∶ 取代,可以直接進行替換的工作。通常這個 s 的動作可以搭配正則表示式。例如 1,20s/old/new/g 

例項:

1.列印
#sed -n '1,3p' /etc/my.cnf
#sed -n '/basedir/p' /etc/my.cnf
#sed -n 's/basedir/datadir/p' /etc/my.cnf
#sed -n '/basedir/,/datadir/p' /etc/my.cnf
2.插入
#sed  '2a user=mysql' /etc/my.cnf //在第二行之後插入


3.刪除
#sed '5,7d' /etc/my.cnf


4.替換
#sed -n 's/\[mysqld\]/& aaaa/p' /etc/my.cnf

[mysqld] aaaa




輸出奇數行或者偶數行

輸出奇數行

[[email protected] src]# sed -n '1~2p' /src/.user.txt 
wangshui
nginx
wangs
apache
[[email protected] src]# awk 'NR%2' /src/.user.txt 
wangshui
nginx
wangs
apache


輸出偶數行

[[email protected] src]# sed -n '2~2p' /src/.user.txt 
wangshui
nginxnginx
wangshui898
apacheapache
[
[email protected]
src]# awk '!(NR%2)' /src/.user.txt 
wangshui
nginxnginx
wangshui898
apacheapache
[[email protected] src]#