sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等
sed命令:
文本處理三劍客:
grep;egrep;fgrep:文本過濾器
sed:Stream EDitor,流編輯器,行編輯器;
awk:文本格式化工具,報告生成器
sed [OPTION]… {script-only-if-no-other-script}[input-file]…
地址定界編輯命令
常用選項:
-n:不輸出模式空間中的內容至屏幕;
-e script, –expression=script:多點編輯;
-f /PATH/TO/SED_SCRIPT_FILE
-r, –regexp-extended:支持使用擴展正則表達式:
-i [SUFFIX], –in-;lace[=SUFFIX]:直接編輯原文件;
地址定界:
(1)不給地址:對全文進行處理;
(2)單地址:
#:指定行
/pattern/:被此模式所匹配到的每一行
(3)地址范圍;
#,#
#,+#
#,/patl/
/patl/,/pat2/,…
$: 最后一行
(4)步進:~
1~2:所有奇數行
2~2:所有偶數行
編輯命令:
d:刪除
p:顯示模式空間中的內容
a \text: 在行后面追加文本“text”,支持使用\n實現多行追加;
i \text:在行前面插入文本“text”,支持使用\n實現多行插入;
c \text: 把匹配到的行替換為此處指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;即文件合并;
=:為模式匹配到的行打印行號;
?。簵l件取反; 地址定界!編輯命令;
s///:查找替換:其分隔符可自行指定,常用的有s@@@,s###等;
替換標記:
g:全局替換
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中
p:顯示替換成功的行
高級編輯命令:
h:把模式空間中的內容覆蓋至保持空間中;
H:把模式空間中的內容追加至保持空間中;
g:把保持空間中的內容覆蓋至模式空間中;
G:把保持空間中的內容追加至模式空間中;
x:把模式空間中的內容與保持空間中的內容互換;
n:覆蓋讀取匹配到的行的下一行至模式空間中;
N:追加讀取匹配到的行的下一行至模式空間中;
d:刪除模式空間中的行;
D:刪除多行模式空間中的所有行;
示例:
sed -n ‘n;p’ FILE:顯示偶數行;
sed ‘1!G;h;$!d’ FILE:逆序顯示文件內容;
sed ‘$!d’ FILE:取出最后一行;
sed ‘$!N;$!D’ FILE:取出文件最后兩行;
sed ‘/^$/d;G’ FILE:刪除原有的所有空白行,
而后為所有的非空白行后添加一個空白行;
sed ‘n;d’ FILE:顯示奇數行;
sed ‘G’ FILE: 在原有的每行后方添加一個空白行;
基本sed編程舉例:
使用p(rint)顯示行: sed -n ‘2p’ temp.txt 只顯示第2行,使用選項n
打印范圍: sed -n ‘1,3p’ temp.txt 打印第1行到第3行
打印模式: sed -n ‘/movie/’p temp.txt 打印含movie的行
使用模式和行號查詢: sed -n ‘3,/movie/’p temp.txt 只在第3行查找movie并打印
顯示整個文件: sed -n ‘1,$’p temp.txt $為最后一行
任意字符: sed -n ‘/.*ing/’p temp.txt 注意是.*ing,而不是*ing
打印行號: sed -e ‘/music/=’ temp.txt
附加文本:(創建sed腳本文件) chmod u+x script.sed, 運行時 ./script.sed temp.txt
#!/bin/sed -f
/name1/ a/ #a/表示此處換行添加文本
HERE ADD NEW LINE. #添加的文本內容
插入文本: /name1/ a/ 改成 4 i/ 4表示行號,i插入
修改文本: /name1/ a/ 改成 /name1/ c/ 將修改整行,c修改
刪除文本: sed ‘1d’ temp.txt 或者 sed ‘1,4d’ temp.txt
替換文本: sed ‘s/source/OKSTR/’ temp.txt 將source替換成OKSTR
sed ‘s//$//g’ temp.txt 將文本中所有的$符號全部刪除
sed ‘s/source/OKSTR/w temp2.txt’ temp.txt 將替換后的記錄寫入文件temp2.txt
替換修改字符串: sed ‘s/source/”ADD BEFORE” &/p’ temp.txt
結果將在source字符串前面加上“ADD BEFORE”,這里的&表示找到的source字符并保存
sed結果寫入到文件: sed ‘1,2 w temp2.txt ‘ temp.txt
sed ‘/name/ w temp2.txt’ temp.txt
從文件中讀文本: sed ‘/name/r temp2.txt’ temp.txt
在每列最后加文本: sed ‘s/[0-9]*/& Pass/g’ temp.txt
從shell向sed傳值: echo $NAME | sed “s/go/$REP/g” 注意需要使用雙引號
快速一行命令:
‘s//.$//g’ 刪除以句點結尾行
‘-e /abcd/d’ 刪除包含abcd的行
‘s/[][][]*/[]/g’ 刪除一個以上空格,用一個空格代替
‘s/^[][]*//g’ 刪除行首空格
‘s//.[][]*/[]/g’ 刪除句號后跟兩個或更多的空格,用一個空格代替
‘/^$/d’ 刪除空行
‘s/^.//g’ 刪除第一個字符,區別 ‘s//.//g’刪除所有的句點
‘s/COL/(…/)//g’ 刪除緊跟COL的后三個字母
‘s/^////g’ 刪除路徑中第一個/
原創文章,作者:MFX,如若轉載,請注明出處:http://www.www58058.com/74549