簡(jiǎn)介
sed命令應(yīng)用廣泛,使用簡(jiǎn)單,是文本流編輯器的利器,逐行對(duì)文件的內(nèi)容進(jìn)行處理處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中,稱為“模式空間”(pattern space),可以指定僅僅處理哪些行。sed處理完成之后把緩沖區(qū)的內(nèi)容送往屏幕,接著處理下一行,這樣不斷重復(fù), 直到文件末尾。sed符合條件的處理,不符合條件的不予處理,文件內(nèi)容并沒有改變,除非用重定向存儲(chǔ)輸出。
一. 簡(jiǎn)單入門
1. 輸出范圍行
參數(shù) -n 這個(gè)參數(shù)是--quiet或者--silent的意思。表明忽略執(zhí)行過程的輸出,只輸出我們的結(jié)果即可。
我們常用的還有另外一個(gè)參數(shù):-i。使用此參數(shù)后,所有改動(dòng)將在原文件上執(zhí)行。你的輸出將覆蓋原文件。非常危險(xiǎn),一定要注意。
范圍1,4 表示找到文件中1,2,3,4行的內(nèi)容。這個(gè)范圍的指定很有靈性,請(qǐng)看以下示例(請(qǐng)自行替換圖中的范圍部分)。
5 選擇第5行。
2,5 選擇2到5行,共4行。
1~2 選擇奇數(shù)行。
2~2 選擇偶數(shù)行。
2,+3 和2,5的效果是一樣的,共4行。
2,$ 從第二行到文件結(jié)尾。
范圍的選擇還可以使用正則匹配。
請(qǐng)看下面示例:
/abc/,+3 選擇出現(xiàn)abc字樣的行,以及后面的三行。
/^abc/,/xyz / 選擇以abc開頭的行,和出現(xiàn)xyz字樣行之間的數(shù)據(jù)。
為了直觀,下面的命令一一對(duì)應(yīng)上面的介紹,范圍和操作之間是可以有空格的。
sed -n '5p' test.txt
sed -n '2,5 p' test.txt
sed -n '1~2 p' test.txt
sed -n '2~2 p' test.txt
sed -n '2,+3p' test.txt
sed -n '2,$ p' test.txt
sed -n '/abc/,+3 p' test.txt
sed -n '/^abc/,/xyz/p' test.txt
操作 p表示打印
2 . 替換操作
替換模式的參數(shù)有點(diǎn)多,但第一部分和第五部分都是可以省略的,"/"可以用"@"、”#“等符號(hào)代替。替換后會(huì)將整個(gè)文本輸出出來。前半部分用來匹配一些范圍,而后半部分執(zhí)行替換的動(dòng)作。
這里的命令是指s。也就是substitute的意思。
sed 's/aaa/bbb/' a.txt #替換每一行的第1個(gè)aaa為bbb
sed 's/aaa/bbb/g' a.txt #替換每一行的所有aaa為bbb
sed 's/aaa/bbb/2' a.txt #替換每一行的第2個(gè)aaa為bbb
sed '1,10s/aaa/bbb/g' #替換第1行到第10行所有的aaa為bbb
sed 's/^[0-9]/(&)/' a.txt #將數(shù)字加上一個(gè)(), &為匹配到的內(nèi)容
sed '/sys/,+3 s/a/b/g' file
sed '/^abc/,/xyz/s/a/b/g' file






