grep命令的查找功能,sed命令的流編輯功能和awk(現已發展成為一門編程語言)作為更強大的文本編輯命令,在Linux系統管理中,起著重要且全面的作用。而後來出現的perl編程語言(PracticalExtraction and Report Language),可以實現sed和awk的幾乎所有功能。但使用perl相對復雜和臃腫,因而sed和awk仍然活躍在shell編程的各個方面。
在sed命令中引入shell變量 http://www.linuxidc.com/Linux/2014-03/97896.htm
Linux下Shell編程——sed命令基本用法 http://www.linuxidc.com/Linux/2013-06/85526.htm
Unix文本處理工具之sed http://www.linuxidc.com/Linux/2013-08/89315.htm
sed 高級用法 http://www.linuxidc.com/Linux/2014-09/106961.htm
(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為寫命令,將當前文件的內容寫入到另一個文件中。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-11/109325p2.htm