sed option 'pattern{command1;command2...}'
$cat test.txt
This is 1
This is 2
This is 3
This is 4
This is 5
1.p和P
p打印當前模式空間內容,追加到默認輸出之後
sed -n 'N;p' test.txt
結果
This is 1
This is 3
P打印從開始到第一個\n的內容,sed並不對每行末尾\n進行處理,但是對N命令追加的行間\n進行處理,因爲此時sed將兩行看做一行。
sed -n 'N;P' test.txt #N前加$!表示末尾行不執行N,可以打印出This is 5在末尾
結果
This is 1
This is 2
This is 3
This is 4
2.n和N
n 提前讀取下一行,覆蓋模式空間前一行(並沒有刪除,因此依然打印至標準輸出),如果命令未執行成功,則放棄後面的命令,讀取下一行再執行sed
使用n命令後
sed -n 'n;p' test.txt
結果
This is 2
This is 4
#讀取This is 1 執行n命令,此時模式空間值爲This is 2.之後讀取This is 3 執行n命令後,模式空間值爲This is 4.讀取This is 5 執行n命令後面沒有內容了,所以放棄後面的p命令而退出
N 追加下一行到當前行,把兩行看作一行,但是\n換行符還在。如果命令未執行成功,則放棄後面的命令,讀取下一行再執行sed
使用N命令後
3.d和D
d 刪除當前模式空間內容(不在傳到標準輸出)並放棄之後的命令,讀取新內容重新執行sed
D 刪除當前模式空間開端至\n換行符內容(不在傳到標準輸出)並放棄之後的命令,但是剩餘模式空間內容重新執行sed
4.y
y命令用於字符轉換與s命令區別在於,y命令中只要查找條件字符中只要有一個字符符合條件便使用替換字符串中相應的字符進行替換
echo " This is a test" | sed 'y/his/HIS/' 而s命令將查找條件字符串作爲一個整體
結果
THIS IS a teSt
echo "This is a test" | sed 's/his/HIS/'
結果
THIS is a test
5.h、H,g、G
h命令是將當前模式空間中內容覆蓋至保持空間,H命令是將當前模式空間中的內容追加至保持空間
g命令是將當前保持空間中內容覆蓋至模式空間,G命令是將當前保持空間中的內容追加至模式空間