sed命令詳解與樣本
grep命令的尋找功能,sed命令的流編輯功能和awk(現已發展成為一門程式設計語言)作為更強大的文本編輯命令,在Linux系統管理中,起著重要且全面的作用。而後來出現的perl程式設計語言(PracticalExtraction and Report Language),可以實現sed和awk的幾乎所有功能。但使用perl相對複雜和臃腫,因而sed和awk仍然活躍在shell編程的各個方面。
在sed命令中引入shell變數
Linux下Shell編程——sed命令基本用法
Unix文本處理工具之sed
sed 進階用法
(1) sed是非互動編輯器,它按行處理對象檔案,但不修改處理檔案本身,而是逐行讀入檔案內容並在臨時緩衝區儲存副本並對其進行處理。處理完成每一行就將該行目標內容列印到螢幕,並將該緩衝區內容刪除,然後讀入下一行進行處理。另外需要注意的是,和grep不同,sed不論是否知道指定的模式,它的退出狀態都是0(Linux中通常代表真)。只有存在語法錯誤時,sed的退出狀態才不是0。
sed命令的一般格式為
sed [option] ‘{ command}’ datafile
或者
sed [option] -f sed_script.sh data_file
如果沒有輸入檔案,則sed將從標準輸入中接收輸入資料流。
(2)常用的sed option
-n取消預設輸出。sed命令預設列印輸入檔案的所有行的同時,再次列印匹配行內容。加上-n命令後,則只列印匹配命令中指明的pattern的行。
-e指定多個編輯命令。sed預設之接受一組命令,如果要指定多個命令,則需要使用-e選項指明各個命令。例如
sed -n -e '1,800{/pattern/p}' -e '1,800{/parttern/=}' datafile
該命令使用-e指定兩個命令。前一個列印匹配pattern的行,後一個列印匹配pattern的行的行號。1, 800是定址條件,指明只查詢處理1到800行的資料。
(3)sed命令
命令p用於顯示sed處理的內容,常和-n選項一起使用,以取消預設列印操作,只列印選定內容。
命令d用於刪除匹配行。注意刪除的是緩衝區副本而非檔案本身。
sed ‘$d’ datafile
sed ‘/pattern/d’ datafile
第一條命令刪除檔案的最後一行($匹配最後一行),列印檔案的所有其它內容。第二條命令刪除匹配pattern的行,並列印其它所有行。
命令s用於替換指定內容。
sed ‘s/pattern/newconent/g’ datafile
sed –n ‘1,20s/str$/newconent/gp’ datafile
第一條命令全域替換(g)檔案中符合pattern的字串為newconent。第二條命令處理1到20行內匹配以str結尾的行($匹配行尾),並把str更換為newcontent後列印匹配行。
上述例示中都以 / 作為匹配串和新字串的分隔字元,但實際上,可以指定其它分隔字元(分行符號、反斜線除外)。指定其它分隔字元時,可使用類似如下方式。
sed ‘s#pattern#newcontent#g' datafile
上述命令指定#為分隔字元。
命令 r 為讀命令,使用該命令將另一個文字檔的內容加到當前檔案的特定位置上讀出。
sed ‘/pattern/r input.txt’ datafile
如果在檔案datafile的某一行匹配到pattern,就在該行後讀入檔案input.txt的內容。該過程為全域型行為。
命令w為寫命令,將當前檔案的內容寫入到另一個檔案中。
更多詳情見請繼續閱讀下一頁的精彩內容: