【替換】s 1
sed
'/mislost/long/g'
filename
在
sed中,檔案的每一行都會作為輸入傳入到
sed中,如果不加
g那麼上述列子中只會替換每一行
第乙個匹配到的
mislost。加g
則會匹配一行中所有的
mislost。
想要定位乙個行,然後去匹配需要這樣做 1
sed
'/test/s/mislost/long/g'
filename
如果這一行包含有
test
,則將mislost
替換為long
在例子中,
/test/
就是乙個位址,
sed在做操作的時候可以指定0個,
1個或者
2個位址。每個地 1
sed
'/test/s/mislost/long/g'
filename
址都是乙個描述模式。
·如果沒有指定位址,那麼命令將應用於每一行。
·如果只有乙個位址,那麼命令應用於這個位址匹配的任意行。
·如果指定了由逗號分隔的兩個位址,那麼命令應用於匹配第乙個位址的第一行和它後面的行,直到匹配到第二個位址的行(包括此行)
·如果位址後面根由感嘆號(
!),那麼命令就應用於不匹配該位址的所有行。
來看乙個有趣的例子: 1
sed
s
'/^$/.mis'
它用.mis來取代每乙個空行。
在替換命令的部分(.mis)不必轉義字面的句點
,所以我可以直接用.而不需要用\.來轉義它。
乙個在替換中列出不想被替換的物件 1
sed
'/---/!s/--/lost/'
上面的例子只會將--替換為lost 而不會將---替換為lost-
【刪除】d 1
2
sed
'd'
它將刪除所有的行
sed
'1d'
它將只刪除第一行
有乙個相當重要的概念: 1
sed
'1d'
file1 file2 它將只刪除file1的第一行,不會刪除file2的第一行
·在sed
中,行號指由
sed維護的內部行數。該計數器不會因為有多個輸入檔案而重置。因此,不管指定了多少個輸入檔案,在輸入流中也只有一行
1。同樣,輸入流也只有乙個最後的行,可以用
$來表示最後一行。
重要:正規表示式必須封閉在斜槓中 1
2
3
/^$/d 只刪除空行
^$d 這樣的使用方法則是錯誤的
$!d 這樣表示除了最後一行,都刪除掉
如果提供兩個位址,那麼久指定了命令執行的行範圍。比如: 1
/^mislost/,/^long
/d
刪除以mislost開頭的到以long開頭的左右行
有乙個很有用的混合使用行位址和模式位址的列子: 1
1
,/^$/d
刪除了從第一行一直到第乙個空行的所有行,可以用來刪除某些檔案的標頭檔案。
清注意,如果檔案中沒有空行,將刪除所有的行!
正常的刪除,sed會將匹配到的行整個刪除,
如果我們想要只刪除行中匹配的部分,可以用替換命令並指定乙個空得替換
,比如:
aabbccdd 想要刪除bb 最後的結果為 aaccdd
1
sed
's/bb//'
【提取內容】
來看兩個簡單的提取例子: 1
2
sed
-n
'/^root/,'
/^mislost
/p
'
sed
-n
'/^root/p;/^mislost/p'
第乙個是提取「以root開頭的行到以mislost開頭的行之間的所有內容」。
第二個是提取「以root開頭的行和以mislost開頭的行」
【插入、追加和更改】a i c 1
sed
'/^a/i\mislost'
插入 在以a開頭的行上插入一行mislost
1
sed
'/^a/a\mislost'
追加 在以a開頭的行下追加一行mislost
1sed
'/^a/c\mislost'
更改 把以a開頭的行修改為mislost
在以a開頭的行下追加mislost
注意:追加和插入只應用於單個行位址,而不是乙個範圍內的行。更改命令可以處理乙個範圍內的行。
這裡的更改命令要區別於替換,替換只是將匹配的關鍵字替換了而不是整個行,c\則修改了整個行的內容。
【列表】l
列表命令(l) 用於顯示模式空間的內容,將非列印的字元顯示為兩個數字的ascii碼。
【轉換】y 1
sed
'y/abc/xyz'
y命令開啟轉換,轉換對應為:
a=>x
b=>y
c=>z
ps:轉換命令的乙個可能的用處是用大寫字母替換對應的小寫字母
【列印】p
【退出】q
退出命令會使sed停止讀取新的輸入行(並停止將它們傳送到輸出)。 1
sed
'/50q/'
列印每一行,直到第50行,並且退出,類似於unix中的head命令。
同樣,這個命令也可以用位址範圍來實現
1
sed
-n
'1,50p'
【高階命令】
h或者h 將模式空間的內容複製或者追加到保持空間
g或者g 將保持空間的內容複製或者追加到模式空間
x 交換保持空間和模式空間的內容
【標籤】
表示前是任意不多餘7個字元的序列。標籤佔據一行並以冒號開始。
乙個有趣的例子
1
sed
':a;n;s/\n//;$!ba'
解析::a定義乙個標籤a
n將下一行的內容新增到當前讀入行,並在末尾加乙個\n
s/\n//將新行中的\n刪掉
$!ba如果讀入行不是最後一行就跳轉到標籤a出繼續執行後面的執行
這個命令的作用在於將乙個檔案中的所有行並列為一行內容。
sed流編輯器
sed預設不編輯原始檔,僅對模式空間中的資料做處理 而後,處理結束後,將模式空間中的內容列印至螢幕。sed options addresscommand file.用行,和命令一起來操作文字 options n 靜默顯示,不再顯示模式空間中的內容 i 直接修改原檔案 e 指令碼 e指令碼 可以同時執...
sed 流編輯器
sed 模式空間 預設不編輯原檔案,僅對模式空間中的資料做處理 而後,處理結束後,將模式空間列印至螢幕 sed options addresscommand file n 靜默模式,不再預設顯示模式空間中的內容 i 直接修改原檔案 e script e script 可以同時執行多個指令碼 f pa...
sed(流編輯器)詳解
行編輯器 全屏編輯器 vi sed 模式空間 預設不編輯原檔案,僅對模式空間中的資料做處理 而後,處理結束後,將模式空間列印至螢幕。sed options addresscommand file options n 靜默模式,不再預設顯示模式空間中的內容 i 直接修改原檔案 i.bak 備份原檔案 ...