sed 的相關用法

寫本篇博客時,正在讀一本叫做《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 爲文件名


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章