sed是流編輯器,對文字進行批量化處理。
sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 ...
sed 處理的檔案既可以由標準輸入重定向得到,也可以當命令列引數傳入,命令列引數可以一次傳入多個檔案,sed會依次處理。sed的編輯命令也可以當命令列引數傳入,也可以寫成乙個指令碼檔案,然後用-f引數指定,編輯命令的格式為:/pattern/action
其中pattern是正規表示式,action是編輯操作。sed程式一行一行讀出待處理檔案,如果某一行與pattern匹配,則執行相應的action,如果一條命令沒有pattern而只有action,這個action將作用於待處理檔案的每一行。
sed主要用來自動編輯乙個或多個檔案;簡化對檔案的反覆操作;sed預設按照basic規範基本匹配。
(1)/pattern/p:列印匹配的行
sed是把待處理檔案的內容聯通處理結果一起輸出到標準輸出,即p命令表示除了把檔案內容列印出來之外還額外列印一遍匹配pattern的行。要想只輸出處理結果,應加上-n選項,這種用法相當於grep命令
例如:有如下file檔案
執行後:
(2)./pattern/d:刪除匹配pattern的行
sed命令不會修改原檔案,刪除命令只表示某些行不列印輸出,而不是從原始檔中刪去。
不開啟原始檔,去除檔案的空行。
刪除符合條件的同時修改原始檔
(3)/pattern/s/pattern1/pattern2/:查詢符合pattern的行,將該行第乙個匹配pattern1的字串替換為pattern2
(4)/pattern/s/pattern1/pattern2/g:查詢符合pattern的行,將該行所有匹配pattern1的字串替換為pattern2
(5)定址
定址用於決定對那些行進行行編輯。位址的形式可以是數字、正規表示式、或二者的結合。如果沒有指定位址,sed將處理輸入檔案的所有行。
例如:列印file檔案第3行和第3行到第六行。
(6)加注釋
例如:在printf那一行加注釋,全部加注釋
全部加注釋,並改變原始檔
(7)加行號
例如:給第二到第四行加行號,全部加行號
sed命令告訴sed如何處理由位址指定的各輸入行,如果沒有指定位址則處理所有的輸入行。
命令:
a\:在當行前後新增一行或多行。多行時除最後一行外,每行
末尾需用"\"續行
c\:用此符號後的新文字替換當前行中文字。多行時除最後一行外,每行末尾需用"\"續行
i\:在當前行之前插入文字。多行時除最後一行外,每行
末尾需用"\"續行d刪除行
h:把模式空間裡的內容複製到暫存緩衝區
h:把模式空間裡的內容追加到暫存緩衝區
g:把暫存緩衝區裡的內容複製到模式空間,覆蓋原有的內容
g:把暫存緩衝區裡的內容追加到模式空間裡,追加在原有內容的後面
p:列印行
q:結束或退出sed
r:從檔案中讀取輸入行
!:對所選行以外的所有行應用命令
s:用乙個字串替換另乙個
g:在行內進行全域性替換
w:將所選的行寫入檔案
x:交換暫存緩衝區與模式空間的內容
y:將字元替換為另一字元(不能對正規表示式使用y命令)
選項:
-n:取消預設的輸出
-f:指定sed指令碼的檔名
5.退出狀態
sed不管是否找到指定的模式,它的退出狀態都是0。只有當命令存在語法錯誤時,sed的退出狀態才不是0。
shell指令碼學習sed
i 替換並儲存 s pattern replace string 只替換第一處 s pattern replace string g 替換所有 s pattern replace string ng 從第n處開始匹配 ex 直接替換文字 clz localhost shell learn sed i...
Shell指令碼學習之sed詳解
linux 1 目錄 sed編輯器逐行處理檔案 或輸入 並將結果傳送到螢幕。具體過程如下 首先sed把當前正在處理的行儲存在乙個臨時快取區中 也稱為模式空間 然後處理臨時緩衝區中的行,完成後把該行傳送到螢幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入檔案...
Shell指令碼補充 sed
var 10 a haha echo var 10 echo 10 echo ab 為空 echo b 輸出hahab a abcdcba echo 輸出abcdcba 完全匹配失敗 echo 輸出dcba abc被刪除了 即到第乙個被匹配的c echo a 輸出abcdcba 不會對源資料做修改a...