sed的用法小結
sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等
sed [OPTION]… ‘script’ [input-file] …
OPTION:
-n 不輸出模式空間中的內容至屏幕,僅顯示script處理后的結果 -e 多點編輯,eg: ~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab -f 每行編輯一個命令 -r 支持使用擴展正則表表達式
地址定界:
(1)空地址:對全文進行處理 (2)單地址: #指定行 /pattern/:被刺模式所匹配的到的每一行 (3) 地址范圍 #,#: #,+#: #,/part1/ /part1/,/part2/ $:最后一行 (4) 步進:~ 1~2:所有奇數行 2~2:所有偶數行
編輯命令:
d:刪除d后面通常不接任何東西 p:顯示模式空間的內容,通常 p 會與參數 sed -n 一起運行~ w: /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中 r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;文件合并 s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等; g:全局替換; w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中; p:顯示替換成功的行; a\test 追加,而這些字串會在新的一行出現(目前的下一行) c\text取代,c后面可以接上字符串 i\text追加,而這些字串會在新的一行出現(目前的上一行)
練習:
刪除/etc/grub2.cfg文件中所有以空白字符開頭的行的行首的所有空白字符; ~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg 刪除/etc/fstab文件中以#開頭的行的行首的#及#后面的所有空白字符 ~]# sed 's@^#[[:space:]]*@@' /etc/fstab 輸出一個絕對路徑給sed命令,取出其目錄,其行為類似于dirname ~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@' 將etc/fstab中的UUID替換成ABCD ~]# sed 's/UUID/ABCD/p' /etc/fstab
注 sed -i 可以直接修改原文件
[root@localhost ~]# vim test.txt [root@localhost ~]# cat test.txt test [root@localhost ~]# sed -i 'a\#This is a test' test.txt [root@localhost ~]# cat test.txt test #This is a test 在要編輯一個超大的文本文件的時候,就可以不用vim打開再編輯了,直接用sed -i 就可以直接在指定行添加內容了!
原創文章,作者:N27_flypig,如若轉載,請注明出處:http://www.www58058.com/85283