我最愛的流編輯器sed用法總結

2021-06-29 14:06:50 字數 4194 閱讀 6737

【替換】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

seds'/^$/.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 備份原檔案 ...