Linux中sed工具的使用
目錄
Sed
sed是一種流編輯器,它是文字處理中非常重要的工具,能夠完美的配合正則表示式使用,功能不同凡響。 處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。
sed命令不對原檔案進行改變,除非使用 -i 引數
sed命令的使用
sed 引數 命令 檔案
- -f 指令碼檔案 以選項中指定的指令碼檔案來處理輸入的文字檔案
- -n 僅顯示處理後的結果
- a\ 在當前行下面插入文字
- i\ 在當前行上面插入文字
- d 刪除選擇的行
- s 替換指定字元
- n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令
- p 列印模板塊的行
- r file 從file中讀行
- i 修改原檔案內容
-n選項和p命令一起使用表示只打印那些發生替換的行: sed -n 's/root/ROOT/p' /etc/passwd
g 命令會替換每一行中的所有匹配:sed 's/root/ROOT/g' /etc/passwd
當需要從第N處匹配開始替換時,可以使用Ng : sed 's/root/ROOT/2g' /etc/passwd
定界符 /
在sed中使用 / 作為定界符,也可以使用任意的定界符,如:
- sed 's:root:ROOT:g'
- sed 's|root|ROOT|g'
當定界符出現在樣式內部時,需要對其進行轉義:sed 's/\/bin\/bash/\/root\/xie/' /etc/passwd ,將/etc/passwd中的 /bin/bash 替換為 /root/xie
刪除操作: d
- 刪除空白行: sed '/^$/d' test
- 刪除檔案的第2行: sed '2d' test
- 刪除檔案的第2行到末尾所有的行:sed '2,$d' test
- 刪除檔案最後一行: sed '$d' test
- 刪除檔案中所有開頭是root的行: sed '/^test/d' test
多點編輯:-e
-e 選項允許在同一行裡執行多條命令
sed -e '1,5d' -e 's/root/ROOT/g' /etc/passwd 先刪除檔案中的1-5行,然後將剩餘的行中所有的root替換為ROOT
從檔案讀入: r 命令
file裡的內容被讀進來,顯示在與test匹配的行後面,如果匹配多行,則file的內容將顯示在所有匹配行的下面:
sed '/test/r file' filename
寫入檔案: w 命令
在example中所有包含test的行都被寫入file裡: sed -n '/test/w file' example
插入
插入(行下) a\
將 this is a test line 追加到 以test 開頭的行後面: sed '/^test/a\this is a test line' file
在 test.conf 檔案第2行之後插入 this is a test line: sed -i '2a\this is a test line' test.conf
插入(行上) i\
將 this is a test line 追加到以test開頭的行前面: sed '/^test/i\this is a test line' file
在test.conf檔案第5行之前插入this is a test line: sed -i '5i\this is a test line' test.conf