第五章 基本sed命令
1. sed命令的基本語法:
(1) 行地址是可選的,它可以是一個模式,被描述爲由斜槓,行號或者行尋址符號括住的正則表達式。
(2) 大部分sed命令接收由逗號隔開的兩個地址,有一些命令值接受單個行地址。
還可以用大括號進行分組使其作用域同一個地址
2. 註釋: 註釋行的第一個字符一定是#號,可以用反斜槓結束前面的註釋可以繼續。若#後面的下一個字符是n,那麼腳本不會自動產生輸出。與命令行選項-n是等價的!
3. 替換:
(1) 語法:
常見的替換標誌flags有:
n-------------表示對本模式中指定模式第n次出現的情況進行替換
g-------------對模式空間的所有出現的情況進行全局更改,若沒有g,通常只是第一次出現的情況被取代
p-------------打印模式空間的內容
w-------------將模式空間的內容寫得文件file中
(2) 解釋:
♥ 若沒有指定地址,那麼就應該應用於與pattern匹配的所有行,若地址被提供,而沒有指定模式,
那麼匹配由地址匹配的內容。
♥ 地址需要一個斜槓作爲定界符,而正則表達式可以使用出換行符的任意字符來分隔,如!
♥ replacement是一個字符串,用來替換正則表達式中的內容,在replacement部分,只有下列字符具有特殊含義:
&-----------------用正則表達式匹配的內容進行替換
\n-----------------匹配第n個字串,這個字串之前在pattern中用\(和\)指定
\--------------------轉義
♥ flag標誌可以進行組合,如gp表示進行全局替換後並打印出來
♥ 數字標誌的使用:
sed 's/*/!/2' test-----------------將test文件中第二個出現的*替換爲!
(3) 替換元字符:主要是值反斜槓、與符號和\n
反斜槓一般用於轉義其他的元字符,但是它在替換字符串中也用於包含換行符。
sed 's/*/\
/2' test--------------------------表示將test文件中的第二個*替換成空,幷包含換行符
on the UNIX Operation System---------------àon the \s-2UNIX\s0 Operation System
4. 刪除
(1) 刪除命令是一個可以改變腳本中的控制流的命令,一旦執行刪除命令,那麼這個“空的”模式空間就不能再進行其它的執行命令!
(2) 注意:刪除命令是以行爲單位的!而不僅是行中所匹配的部分。
5. 追加、插入和更改
(1) 追加:將文本放置在當前行之後
(2) 插入:將文本放置在模式空間的當前行之前
(3) 更改:更改命令用所提供的文本取代模式空間中的內容
【注意】這些命令的每一個都要求後面跟一個反斜槓用於轉義第一個行尾。text必須從下一行開始輸入。
(4) 追加命令和插入命令只應用於單個行地址,而不是一個範圍內的行,然而更改命令可以處理一個範圍內的行,這種情況下,它用一個文本備份取代所有被尋址的行。注意,所提供的文本卻僅僅只輸出一次!
6. 列表命令(l):可以用此命令來檢測輸入中的“不可見”字符,如行尾,一些非打印字符等。
[root@localhost sedawk2progs]# sed -n 'l' test
abc$
gh$
js$
cdw$
其中$代表行尾。
7. 轉換(y)-------------------對應匹配,對應轉換
語法:
它會將字符串abc中的每個字符,都轉換成字符串xyz中的等價字符,注意替換是按照字符的位置進行
的,因此,它沒有“詞”的概念。
(完成大寫字母替換對應的小寫字母)
8. 打印(p): 用來輸出模式空間的內容,除非抑制默認的輸出(-n),否則它將輸出行的重複複製。
9. 打印行號:跟在地址後面的等號=打印被匹配的行的行號,除非抑制自動輸出否則行號和行均將被打印出來。語法爲:
10. 下一步命令(n):輸出模式空間中的內容,然後讀取輸出下一行,而不用返回到腳本的頂端。語法:
next命令改變了正常的流控制,這正是它的主要目的。
11. 讀與寫文件命令(r,w): 命令可以直接處理文件。語法:
讀命令將由file指定的文件確定的行之後的內容讀入模式空間。它不能對一個範圍內的行進行操作。
寫命令是將模式空間的內容寫入文件中。
12. 退出命令(q):會使sed停止讀取新的輸入行。語法:
一旦找到和address匹配的行,腳本就結束。
sed ‘100q’ test----------使用退出命令打印前100行
【注意】quit一個可能想到的用處是,從文件中提取出想要的內容之後自動退出腳本,但是,這一版不會
得逞,因爲quit命令使得只要找到和address匹配的行,它就會立馬退出!