日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】 SED多行模式空间

發布時間:2024/9/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】 SED多行模式空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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命令是將當前保持空間和模式空間內容互換

?

轉自:http://hi.baidu.com/aaa103439/item/dbaa6d0d27b4f812cc34eab8

轉載于:https://www.cnblogs.com/nhlinkin/p/3566619.html

總結

以上是生活随笔為你收集整理的【转】 SED多行模式空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。