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