一· sed簡介
與Vi等全屏編輯器不同,sed是一個非交互式的文本編輯器,它可以對文本文件和標準輸入進行編輯, 標準輸入可以來自鍵盤、文件重定向、字符串、變量,甚至來自管道的文本。sed是對文本中的行進行 逐行處理。
sed只是對緩衝區中原始文件的副本進行編輯,並不編輯源文件。如何需要保存改動的內容,需要將輸 出重定向到另一個文件,可以使用下面格式的命令:
sed 'sed命令' input-file > result-file
二· sed調用的二種方式:
1.在shell命令行輸入命令調用sed,格式爲:
sed [option] 'sed命令' 輸入文件
例:sed -n '1,5p' /etc/inittab
注意sed命令需要用單引號引起來
2. ./sed 腳本文件 輸入文件
三· sed 常用的選項
-n : 表示不打印所有行到標準輸出
-e:表示將下一個字符串解析爲sed編輯命令,如果只傳遞一個編輯命令可省略
-r:表示可以使用擴展正則表達式元字符
-i:直接修改原文件
四· 文本定位方式
空爲全局:即不定位行號爲作用全文
x:x爲指定精確行號
x,y:指定從x到y的行號範圍
/pattern/:查詢包含模式的行
/pattern/pattern/:查詢包含兩個模式的行
/pattern/,x:從與pattern匹配 的行到x號的行之間的行
x,/pattern/:從x號行到與pattern匹配的行之間的行
x,y!:查詢不包括x和y行之間範圍的行
!不能用於關鍵字匹配,無法表示不與/pattern/匹配的行
$: 表示最後一行
例: sed -n '/\./p' /etc/inittab 匹配 . 符號
sed -n '$p' /etc/inittab 打印最後一行
sed -n '2,10!p' /etc/inittab 打印不在2至10行內的行
五· 基本編輯命令
i \ : 在匹配行的前面插入文本
a \: 在匹配行的後面插入文本
c \:將所匹配的文本行利用新文本替代(整行替換)
d:刪除指定行
w:寫入到一個新文件
r:從文本中讀入文本
y:字符變換,將一系列字符變換爲相應字符,對字符逐個處理
sed 'y/12345/678910/' input (被變換的字符序列/變換的字符序列/)
要求被變換的字符序列和變換的字符序列等長,否則報錯
l:顯示控制字符(非打印字符)
q:完成指定地址的匹配後立即退出
s:將所匹配的文本行利用新文本替換,和c \相比,s可以替換字符串,而c \只能替換整行
s/被替換的字符串/新字符串/[替換選項]
s/pattern/string/g
被替換字符串可以用正則表達式,而新字符串不可以
如: s/m.*l/lx/g (/符號可以換成@,#,%等符號,s#m.*l#lx#g)
還可以指定替換第幾次匹配的關鍵字,只需在替換的選項上加相應數字,1-512之間
如:sed -n 's/mxl/lx/2p' (替換第2次匹配到的mxl字符爲lx)
{}:指定在定位行上能執行的命令組,類似於選項-e
例: sed -n '/mxl/p' -e '/mxl/=' /etc/inittab 等價於
sed -n '/mxl/{p;=}' /etc/inittab
sed -n '/mxl/{s/m/M/g;s/x/X/g;}' /input