sed命令
sed:Stream Editor,流編輯器
行編輯操作工具;
sed再實施文本文件處理時,是以行爲單位對一個或多個文件進行行編輯處理;
每次sed會處理給定的文件中的一行內容;
sed在處理文件時,將正在處理的當前行存儲到臨時的內存緩衝區中,稱爲“模式空間”
所謂的模式空間是sed命令的主要工作車間;對於緩存的行,使用給定的PATERN取匹配,
如果能匹配成功,則使用相應的Command進行編輯處理;反之,將此行直接發送至標準
輸出,而後繼續處理下一行,知道文檔結尾;
默認其概況下,sed處理的文件內容都是在內存中完成的,並不會影響磁盤上存放的文件內容;
sed默認有循環遍歷的含義,可以使用sed簡化爲文件的遍歷循環操作;
sed命令:
sed - stream editor for filtering and transforming text
格式:
sed [OPTION]... {script} [input-file]...
常用選項:
-n, --quiet, --silent:對不能被PATTERN匹配的行,不發往標準輸出;
-e script, --expression=script:多條件編輯;
-f script-file, --file=script-file:從指定的script-file中讀取腳本內容再編輯;
注意:script-file最好使用絕對路徑來指定;
-i[SUFFIX], --in-place[=SUFFIX]:直接編輯源文件(不建議使用);
-r, --regexp-extended:可以使用sed支持擴展正則表達式;
例:輸出以#開頭的行:# sed -n '/^#/p' /etc/fstab
script:AddressesCommand
Addresses:地址定界
1.空地址:表示對所有文件的所有行進行編輯處理;
2.單地址:sed對於能夠匹配該地址的唯一地址一一進行處理;
#:表示指定行號那行;
/PATTERN/:能夠被PATTERN匹配到的所有行;
$:表示指定文件的最後一行;sed不支持$-1;
3.地址範圍:
add1,add2:add1和add2都表示行號,從add1行開始到add2行結束中的所有行,包括add1和add2;
first-step:first和step都是數字,從first行開始,以step爲步長,所進過的所有行;例:1~1
addr1,+N:從addr1行開始,向後查找N行;
addr1,~N:從addr1行開始,向後查找addr1*N行,包括addr1行;
例:輸出文件前三行:# sed -n '1,3p' /etc/fstab
4./PATTERN1/,/PARTTERN2:
從被PATTERN1第一次匹配的行開始,到被PATTERN2第一次匹配的行結束;繼續向後找第二次匹配
第三次匹配的行......
Command:
=:顯示被PATTERN匹配到的行的行號;
a \text:在被模式匹配的行之後追加text的內容;支持使用“\n”換行,從而實現追加多行信息;
i \text: 在被模式匹配的行之前追加text的內容;支持使用“\n”換行,從而實現追加多行信息;
c \text: 在被模式匹配的行直接修改爲text的內容;支持使用“\n”換行,從而實現修改原內容多行信息;
d Delete pattern space. Start next cycle.在模式空間中刪除被模式匹配的行;
注意: 一般在使用d命令時,不建議使用-n;
p:j將模式空間中被模式匹配的行發送到標準輸出;
注意: 一般在使用p命令時,建議使用-n;
w filename:filename可以是一個相對路徑,也可以是一個絕對路徑;w命令將模式空間中被模式匹配
到的行,存儲到指定文件中;
注意: 一般在使用w命令時,建議使用-n;
r filename:可以是一個相對路徑,也可以是一個絕對路徑;r命令將模式空間中被模式匹配
到的文件內容添加至被模式匹配的行的後面;
!Command:在模式空間中被模式匹配的行,不執行Command;相反,沒有被匹配但的行執行Command;
例:在以#開頭的行後追加666的內容:sed '/^#/a \666' /etc/fstab
例:輸出以空白字符開頭的行:# sed -n '/^[[:space:]]/p' dl.txt
s///:查找並替換,分隔符可以隨意更換,但須保持一致;s@@@....
s/regexp/replacement/[control]
regrexp:正則表達式,也就是PATTERN,計劃查找並替換的就是被regrexp匹配到的內容;
replacement:要替換的結果,純字符串;
支持後向引用:
s/\(string\)/&/
s/\(string\)/\1/
例:將文件中的#替換爲@:# sed 's/^#/@/' /etc/fstab
將文件中開頭的空白字符替換成#:# sed 's/^[[:space:]]/#/' dl.txt
高級編輯命令:
h:將模式空間中的內容存儲到保持空間中,並覆蓋保持空間中原有內容;
H:將模式空間中的內容存儲到保持空間中,並追加至原有內容之後;
g:從保持空間取出數據存儲到模式空間中,並覆蓋模式空間的原有內容;
G:從保持空間取出數據存儲到模式空間中,並追加至原有內容之後;
x:將模式空間中的內容與保持空間中的內容交換;
n:讀取被PATTERN匹配到的行的下一行,覆蓋到模式空間;
N:讀取被PATTERN匹配到的行的下一行,追加到模式空間;
D:刪除模式空間中的所有行;
sed命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.