【轉】sed命令n,N,d,D,p,P,h,H,g,G,x解析
1、
sed執行模板=sed '模式{命令1;命令2}'
即逐行讀入模式空間,執行命令,最後輸出列印出來
2、
為方便下面,先說下p和P,p列印當前模式空間內容,追加到預設輸出之後,P列印當前模式空間開端至\n的內容,並追加到預設輸出之前。
sed並不對每行末尾\n進行處理,但是對N命令追加的行間\n進行處理,因為此時sed將兩行看做一行。
2-1、n命令
n命令簡單來說就是提前讀取下一行,覆蓋模型空間前一行(並沒有刪除,因此依然列印至標準輸出),如果命令未執行成功(並非跳過:前端條件不匹配),則放棄之後的任何命令,並對新讀取的內容,重頭執行sed。
例子:
從aaa檔案中取出偶數行
1 2 3 4 5 6 7 8 9 10 | cat aaa This is 1 This is 2 This is 3 This is 4 This is 5 sed -n 'n;p' aaa //-n 表示隱藏預設輸出內容 This is 2 This is 4 |
注 釋:讀取This is 1,執行n命令,此時模式空間為This is 2,執行p,列印模式空間內容This is 2,之後讀取 This is 3,執行n命令,此時模式空間為This is 4,執行p,列印模式空間內容This is 4,之後讀取This is 5,執行n 命令,因為沒有了,所以退出,並放棄p命令。
因此,最終列印出來的就是偶數行。
2-2、N命令
N命令簡單來說就是追加下一行到模式空間,同時將兩行看做一行,但是兩行之間依然含有\n換行符,如果命令未執行成功(並非跳過:前端條件不匹配),則放棄之後任何命令,並對新讀取的內容,重頭執行sed。
例子:
從aaa檔案中讀取奇數行
1 2 3 4 5 6 7 8 9 10 11 | cat aaa This is 1 This is 2 This is 3 This is 4 This is 5 sed -n '$!N;P' aaa This is 1 This is 3 This is 5 |
註釋中1代表This is 1 2代表This is 2 以此類推
註釋:讀取1,$!條件滿足(不是尾行),執行N命令,得出1\n2,執行P,列印得1,讀取3,$!條件滿足(不是尾行),執行N命令,得出3\n4,執行P,列印得3,讀取5,$!條件不滿足,跳過N,執行P,列印得5
2-3、d命令
d命令是刪除當前模式空間內容(不在傳至標準輸出),並放棄之後的命令,並對新讀取的內容,重頭執行sed。
d命令例子
從aaa檔案中取出奇數行
1 2 3 4 5 6 7 8 9 10 11 | cat aaa This is 1 This is 2 This is 3 This is 4 This is 5 sed 'n;d' aaa This is 1 This is 3 This is 5 |
註釋:讀取1,執行n,得出2,執行d,刪除2,得空,以此類推,讀取3,執行n,得出4,執行d,刪除4,得空,但是讀取5時,因為n無法執行,所以d不執行。因無-n引數,故輸出1\n3\n5
2-4、D命令
D命令是刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之後的命令,但是對剩餘模式空間重新執行sed。
D命令例子
從aaa檔案中讀取最後一行
1 2 3 4 5 6 7 8 9 | cat aaa This is 1 This is 2 This is 3 This is 4 This is 5 sed 'N;D' aaa This is 5 |
註釋:讀取1,執行N,得出1\n2,執行D,得出2,執行N,得出2\n3,執行D,得出3,依此類推,得出5,執行N,條件失敗退出,因無-n引數,故輸出5
2-5、y命令
y命令的作用在於字元轉換
y命令例子:
將aaa檔案內容大寫
1 2 3 4 5 6 | sed 'y/his/HIS/' aaa THIS IS 1 THIS IS 2 THIS IS 3 THIS IS 4 THIS IS 5 |
此外,如果需要對某個字串進行大小寫轉換,則可使用如下方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | cat ddd This is a and a is 1 This is b and b is 2 This is c and c is 3 This is d and d is 4 This is e and e is 5 sed 's/\b[a-z]\b/\u&/g' ddd This is A and A is 1 This is B and B is 2 This is C and C is 3 This is D and D is 4 This is E and E is 5 |
2-6、h命令,H命令,g命令,G命令
h命令是將當前模式空間中內容覆蓋至保持空間,H命令是將當前模式空間中的內容追加至保持空間
g命令是將當前保持空間中內容覆蓋至模式空間,G命令是將當前保持空間中的內容追加至模式空間
命令例子:
將ddd檔案中數字和字母互換,並將字母大寫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | cat ddd. sed h { s/.*is \(.*\) and .*/\1/ y /abcde/ABCDE/ G s/\(.*\)\n\(.*is \).*\(and \).*\(is \)\(.*\)/\2\5 \3\5 \4\1/ } sed -f ddd. sed ddd This is 1 and 1 is A This is 2 and 2 is B This is 3 and 3 is C This is 4 and 4 is D This is 5 and 5 is E |
註釋:讀取1,執行h,複製到保持空間,執行s,模式空間得到匹配到的字母a,然後執行y,將a轉成A,執行G,追加保持空間內容到模式空間,得
A\nThis is a and a is 1;執行s,重新排列,得出This is 1 and 1 is A;以此類推,得出結果。
這裡需要注意的是匹配的內容中,空格一定要處理好,空格處理不對,會造成第二次s匹配錯誤,無法執行重新排列或排列錯誤
2-7、x命令
x命令是將當前保持空間和模式空間內容互換
相關文章
- 整理:SED的模式空間與緩衝區及n,N,d,D,p,P,h,H,g,G,x解析模式
- sed ‘1!G;h;$!d’解析
- 命令列終端連線V-P-N命令列
- H3D Engine3D
- Linux 中 sed命令 h和H選項的應用Linux
- ICPC2023杭州站題解(B D E F G H J M)
- CCNA專業英文詞彙紅寶書---N、O、P、Q(轉)
- Java網路 1.7 h 和 p 標籤Java
- G. D-FunctionFunction
- Codeforces 486D Valid Sets:Tree dp【n遍O(n)的dp】
- echo -n "12345678" > /data/params/d/DongleId
- Win7 - Administrator登陸後變成Temp用戶Win7
- PHP 解迷宮之 G + H 最小PHP
- D37 2-SAT P3007 [USACO11JAN] The Continental Cowngress G
- 802.11a/b/g/n詳解
- CCNA專業英文詞彙紅寶書---F、G、H篇(轉)
- Stanford機器人D-H座標系機器人
- 關於宏定義 Bin(n),LongToBin(n),LongToBin(0x##n##L)
- http://39.101.167.253/d/NOIPhis/p/101HTTP
- P8304 [CoE R4 D] 01 串
- 非1~2^n數列的自然數密碼《二D》密碼
- 華碩(ASUS)WL-330N3G 11N 150M便攜3G無線路由器路由器
- 華為、D-Link多款路由器被P2P殭屍網路接管路由器
- 技嘉990X-D3P主機板配8350 打造AMD遊戲機遊戲
- 從表mytest(a,b,c,d)中選取以c排序後的第N至N+3行排序
- Leetcode Pow(x,n)LeetCode
- 科大訊飛p30 5G版和p30對比 評測
- JD H5解析H5
- quick-cocos2d-x解析jsonUIJSON
- Maven中的-D(Properties屬性)和-P(Profiles配置檔案)Maven
- 從free(p)到delete[]p (轉)delete
- nvidia控制皮膚只有3d設定 筆記本n卡就一個3d3D筆記
- P4544 [USACO10NOV] Buying Feed G
- Leetcode-Pow(x,n)LeetCode
- Pow(x,n) leetcode javaLeetCodeJava
- Oracle10g實現只讀表的N種方法Oracle
- 我用爬蟲爬下來91P**N七萬多條視訊,發現...爬蟲
- 題解:P10380 「ALFR Round 1」D 小山的元力