寫本篇博客時,正在讀一本叫做《sed & awk》的第三版書籍,這本書真的很不錯,作爲一本熱門技術書籍,足以見得作者是一個很用心的人,(當然我看的是中文翻譯版的,翻譯作者同樣用心),感謝作者提供這樣優秀的書籍供熱愛技術的人們學習,感謝。
說起sed,不得不說一說ed,首先來說ed類的編輯器都是基於行進行操作的,sed也是這樣。
ed中的命令說明:
ed中的操作分兩部分,一是地址操作,二是對行的修改操作。
以下爲ed的刪除命令
root@guest-virtual-machine:/home/guest/shell# ed test.sed 399 #顯示的是文件中的字符的個數 p #顯示當前行 -rw-r--r-- 1 root root 0 5月 24 17:01 test.sed 1 #切換至當前行號 總用量 24 2 drwxrwxr-x 3 guest guest 4096 5月 24 16:54 ./ d 2 #刪除當前行號的行 drwxr-xr-x 25 guest guest 4096 5月 24 09:41 ../
g/test/d #表示全局刪除帶有test的所有的行,刪除後,發現沒有了包含test的行。 1 總用量 24 2 drwxr-xr-x 25 guest guest 4096 5月 24 09:41 ../ 3 -rw-r--r-- 1 root root 91 1月 9 17:20 function 4 drwxr-xr-x 2 root root 4096 1月 9 17:26 function_import/ 5 #如果命令出錯,顯示? ?
以下爲替換命令:(替換命令,我只提出下邊兩種情況)
/test/s/test/test1/g # 地址爲/test/ 修改是/s/test/test1/g ,表示修改test所在第一行的所有test爲test1 1 總用量 24 2 drwxrwxr-x 3 guest guest 4096 5月 24 16:54 ./ 3 drwxr-xr-x 25 guest guest 4096 5月 24 09:41 ../ 4 -rw-r--r-- 1 root root 84 1月 9 16:56 args_test1 5 -rw-rw-r-- 1 guest guest 62 1月 8 21:30 file_test_1 6 -rw-r--r-- 1 root root 91 1月 9 17:20 function 7 drwxr-xr-x 2 root root 4096 1月 9 17:26 function_import/ 8 -rw-r--r-- 1 root root 0 5月 24 17:01 test.sed
g/test/s/test/test1/g #表示匹配所有帶有test的行,並修改所有的test爲test1 1 總用量 24 2 drwxrwxr-x 3 guest guest 4096 5月 24 16:54 ./ 3 drwxr-xr-x 25 guest guest 4096 5月 24 09:41 ../ 4 -rw-r--r-- 1 root root 84 1月 9 16:56 args_test1 5 -rw-rw-r-- 1 guest guest 62 1月 8 21:30 file_test1_1 6 -rw-r--r-- 1 root root 91 1月 9 17:20 function 7 drwxr-xr-x 2 root root 4096 1月 9 17:26 function_import/ 8 -rw-r--r-- 1 root root 0 5月 24 17:01 test1.sed 9 ?
總結說明:開始處的“g”爲全局命令,表示匹配所有的這個(字符,或是正則)地址,結尾處的“g”表示匹配每一行中出現的這個字符,或者正則。(如果地址和匹配字符一樣,可以進行省略。)
g/test/s//test1/g 1 總用量 24 2 drwxrwxr-x 3 guest guest 4096 5月 24 16:54 ./ 3 drwxr-xr-x 25 guest guest 4096 5月 24 09:41 ../ 4 -rw-r--r-- 1 root root 84 1月 9 16:56 args_test1 5 -rw-rw-r-- 1 guest guest 62 1月 8 21:30 file_test1_1 6 -rw-r--r-- 1 root root 91 1月 9 17:20 function 7 drwxr-xr-x 2 root root 4096 1月 9 17:26 function_import/ 8 -rw-r--r-- 1 root root 0 5月 24 17:01 test1.sed 9 ?
以下爲grep命令在實際中的應用:(查找結果會高亮顯示)
root@guest-virtual-machine:/home/guest/shell# grep 'test' test.sed -rw-r--r-- 1 root root 84 1月 9 16:56 args_test -rw-rw-r-- 1 guest guest 62 1月 8 21:30 file_test_1 -rw-r--r-- 1 root root 0 5月 24 17:01 test.sed
sed 的使用方法,替換命令。(一般使用‘’將命令進行處理,也可用“”)
root@guest-virtual-machine:/home/guest/shell# cat edtest guest,13 king road,china master,17 beihaidao road,japan bob,20 paris kk road,french tom,34 dynamic road ,German xinchen,19 zhongshan road,china root@guest-virtual-machine:/home/guest/shell# sed 's/road/street/' edtest guest,13 king street,china master,17 beihaidao street,japan bob,20 paris kk street,french tom,34 dynamic street ,German xinchen,19 zhongshan street,china
可以直接採用文件的形式驚醒匹配,將sed的參數(規則,正則表達式等)寫在一個文件中,然後通過以下命令進行調用:
sed -f sedscript filename # sedscript 爲腳本名,filename 爲文件名