sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。
sed使用參數:
-n∶取消默認的輸出,使用安靜(silent)模式。
-d: 刪除
-e∶進行多項編輯,即對輸入行應用多條sed命令時使用. 直接在指令列模式上進行 sed 的動作編 輯
-f∶指定sed腳本的文件名. 直接將 sed 的動作寫在一個檔案內。
-r∶sed 的動作支援的是延伸型正則表達式的語法。(預設是基礎正則表達式語法)
-i∶直接修改讀取的文件內容,而不是由屏幕輸出
舉例:刪除某行
刪除第三行到第四行
[root@www tmp]# sed '3,4d' fstab
刪除最後一行
[root@www tmp]# sed '$d' fstab
顯示第三行到第四行
[root@www tmp]# sed -n '3,4p' fstab
顯示最後一行
[root@www tmp]# sed -n '$p' fstab
顯示第五行
[root@www tmp]# sed -n '5p' fstab
查詢關鍵字xs所在所有的行
[root@www tmp]# sed -n '/xs/p' fstab
在第一行後增加字符串“hello”
[root@www tmp]# sed -n '1a hello' fsta
在第一行到第三行後增加字符串“hello”
[root@www tmp]# sed -n '1,3a hello' fsta
練習
1:刪除/boot/grub/grub2.cfg文件中所有以空白字符開頭的行的行首的所有空白字符;
~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
2:刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#後面的所有空白字符;
~]# sed 's@^#[[:space:]]*@@' /etc/fstab
3:輸出一個絕對路徑給sed命令,取出其目錄,其行爲類似於dirname;
~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'