Sed指令總彙
1.:
用法:
:lable
在腳本中标記一行,用于實作由b或t的控制轉移。Label最多可以包含7個字元
2.=
=[address]=
将所尋址的行編寫到标準輸出
3.a
[address]a
text
在與address比對的每行後面追加text。如果text多于一行,必須用反斜杠将這些行前面的換行符“隐藏”起來。Text将被沒有用這
種方法隐藏的第一個換行符結束。Text在模式空間中是不可用的并且後續的指令不能應用于它。當編輯指令的清單用完時,這個指令
的結果将被輸送到标準輸出,而不管在模式空間中的目前行發生了什麼。
4.b
[address1[,address2]]b[label]
無條件地将控制轉移到腳本的其他位置的:label處。也就是說,label後面的指令是應用于目前行的下一個指令。如果沒有指定
label, 控制将一直到達腳本的末端,是以不再有指令作用于目前行。
5.c
[address1[,address2]]c
用text替代(改變)由位址標明的行。當指定的是一個行範圍時,将所有的這些行作為一個組由text的一個副本來替代。每個text行
後面的換行符必須用反斜杠将其轉義,但最後一行除外。實際上,模式空間的内容被删除,是以後續的指令不能應用于它(或應用于text)
6.d
[address1[,address2]]d
從模式空間中删除行。是以行沒有傳遞到标準輸出。一個新的輸入行被讀取,并用腳本的第一個指令來編輯。
7.D
[address1[,address2]]D
删除由指令N建立的多行模式空間中的一部分(直到嵌入的換行符),并且用腳本的第一條指令恢複編輯。如果這個指令使模式空間
為空,那麼将讀取一個新的輸入行,和執行了d指令一樣。
8.g
[address1[,address2]]g
将保持空間(參見h或H指令)中的内容複制到模式空間中,并将目前的内容清除。
9.G
[address1[,address2]]G
将換行符後的保持空間(參見h或H指令)内容追加到模式空間。如果保持空間為空,則将換行符添加到模式空間。
10.h
[address1[,address2]]h
将模式空間的内容複制到儲存空間,即一個特殊的臨時緩沖區。儲存空間的目前内容被清除。
11.H
[address1],address2]]H
将換行符和模式空間的内容追加到保持空間中,即使保持空間為空,這個指令也追加換行符。
12.i
[address1]i
将text插入到每個和address比對的行的前面
13.l
[address1[,address2]]l
列出模式空間的内容,将不可列印的字元表示為ASCII碼。長的行被折行。
14.n
[address1[,address2]]n
讀取下一個輸入行到模式空間。目前行被送到标準輸出。新行成為目前行并遞增行計數器。将控制轉到n後面的指令,而不是恢複到
腳本的頂部。
15.N
[address1[,address2]]N
将下一個輸入行追加到模式空間的内容之後;新添加的行與模式空間的目前内容用換行符分隔(這個指令用于實作跨兩行的模式比對
。利用n來比對嵌入的換行符,則可以實作多行比對模式)。
16.p
[address1[,address2]]p
列印所尋址的行。注意這将導緻輸出的重複,除非預設的輸出用”#n”或”-n”指令行選項限制。常用于改變流控制(d,n,b)的命
令之前并可能阻止目前行被輸出。
17.P
[address1[,address2]]P
列印由指令N建立的多行模式空間的第一部分(直接嵌入的換行符)。如果沒有将N應用于某一行則和p相同。
18.q
[address]q
當遇到address時退出。尋址的行首先被寫到輸出(如果沒有限制預設輸出),包括前面的a或r指令為它追加的文本。
19.r
[address]r file
讀取file的内容并追加到模式空間内容的後面。必須在r和檔案名file之間保留一個空格。
20.s
[address1[,address2]]s/pattern/replacement/[flags]
用replacement代替每個尋址的pattern。如果使用了模式位址,那麼模式//表示最後指定的模式位址。可以指定下面的标志:
n 替代每個尋址的行的第n個/pattern/。N是1到512之間的任意數字,并且預設值為1。
g 替代每個尋址的行的所有/pattern/,而不隻是第一個
p 如果替換成功則列印這一行。如果成功進行了多個替換,将列印這個行的多個副本。
w file 如果發生一次替換則将這行寫入file。最多可以打開10個不同的file。
replacement是一個字元串,用來替換與正規表達式比對的内容.在replacement部分,隻有下列字元有特殊含義:
& 用正規表達式比對的内容進行替換
n 比對第n個子串(n是一個數字),這個子串以前在pattern中用"("和")"指定.
當在替換部分包含"與"符号(&),反斜杠()和替換指令的定界符時可用轉義它們.另外,它用于轉義換行符并建立多行
replacement字元串.
數字标志
s/pattern/replacememt/flag
如果flag是數字, 那麼指定對一行上某個位置的比對.如果沒有數字标志,則替換指令隻替換第一個比對串,是以"1"可以被看作是預設
的數字标志.
替換元字元是反斜杠()、與符号(&)和n。
反斜杠一般用于轉義其他的元字元,但是它在替換字元串中也用于包含換行符。
例如對于如下的行:
column1(制表符)column2(制表符)column3(制表符)column4
使用如下替換語句:
s/制表符/
/2
注意,在反斜杠的後面不允許有空格。這個腳本産生下面的結果:
column1(制表符)column2
column3(制表符)column4
"與"符号(&)作為元字元表示模式比對的範圍,不是被比對的行.例如下面的指令:
s/UNIX/s-2&s0/g
可以将輸入行:
on the UNIX Operating System.
替換成:
on the s-2UNIXs0 Operating System.
當正規表達式比對單詞的變化時,"與"符号特别有用.它允許指定一個可變的替換字元串.諸如"See Section 1.4"或"See Section
12.9"的引用都應該出現在圓括号中,如"(See Section 12.9)".正規表達式可以比對數字的不同組合,是以在替換字元串中可以使用
"&"并括起所比對的内容:
s/See Section [1-9][0-9]*.[1-9][0-9]*/(&)/
這裡"與"符号用于在替換字元串中引用整個比對内容.
n元字元用于選擇被比對的字元串的任意獨立部分,并且在替換字元串中回調它.在sed中轉義的圓括号包覆正規表達式的任意部分并
且儲存以備回調.一行最多允許儲存9次.例如,當節号出現在交叉引用中時要表示為用粗體:
s/(See Section )([1-9][0-9]*.[1-9][0-9]*)/1fB2fp/
再來看另外一個例子:
$ cat test1
first:second
one:two
$ sed 's/(.*):(.*)/2:1/ test1
second:first
two:one
21.t
[address1[,address2]]t[label]
測試在尋址的行範圍内是否成功執行了替換,如果是,則轉移到有label标志的行(參見b和:)。如果沒有給出label,控制将轉移到
腳本的底部。
22.w
[address1[,address2]]w file
将模式空間的内容追加到file。這個動作是在遇到指令時發生而不是在輸出模式空間内容時發生。必須在w和這個檔案名之間保留一
個空格。在腳本中可以打開的最大檔案數是10。如果檔案不存在,這個指令将建立一個檔案。如果檔案存在,則每次執行腳本時将改
寫其内容,多重寫入指令直接将輸出寫入到同一個檔案并追加到這個檔案的末端。
23.x
[address1[,address2]]x
交換模式空間和保持空間的内容。
24.y
[address1[,address2]]y/abc/xyz/
按位置将字元串abc中的字元替換成字元串xyz中相應字元。