亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

sed模式空間和暫存空間的區別

2020-07-27 19:26:20
字體:
來源:轉載
供稿:網友

sed編輯器逐行處理文件,并將輸出結果打印到屏幕上。sed命令將當前處理的行讀入模式空間(pattern space)進行處理,sed在該行上執行完所有命令后就將處理好的行打印到屏幕上(除非之前的命令刪除了該行),sed處理完一行就將其從模式空間中刪除,然后將下一行讀入模式空間,進行處理、顯示。處理完文件的最后一行,sed便結束運行。sed在臨時緩沖區(模式空間)對文件進行處理,所以不會修改原文件,除非顯示指明-i選項。

與模式空間和暫存空間(hold space)相關的命令:

n 輸出模式空間行,讀取下一行替換當前模式空間的行,執行下一條處理命令而非第一條命令。
N 讀入下一行,追加到模式空間行后面,此時模式空間有兩行。
h 把模式空間里的行拷貝到暫存空間。
H 把模式空間里的行追加到暫存空間。
g 用暫存空間的內容替換模式空間的行。
G 把暫存空間的內容追加到模式空間的行后。
x 將暫存空間的內容于模式空間里的當前行互換。
! 對所選行以外的所有行應用命令。

注意:暫存空間里默認存儲一個空行。

下面是一些例子:

cat datafile
111111111111 aaa
222222222222 bbb
333333333333 ccc
444444444444 ddd
555555555555 eee
666666666666 fff

在每行后面加一空行:

sed 'G' datafile
111111111111 aaa

222222222222 bbb

333333333333 ccc

444444444444 ddd

555555555555 eee

666666666666 fff

aaa行被讀入模式空間,執行G,在此行后面追加一個空行,然后打印模式空間,其他行同理。

在匹配行后加一空行:

sed '/ccc/G' datafile
111111111111 aaa
222222222222 bbb
333333333333 ccc

444444444444 ddd
555555555555 eee
666666666666 fff

在匹配行前加入一個空行:

sed '/ccc/{x;p;x;}' datafile
111111111111 aaa
222222222222 bbb

333333333333 ccc
444444444444 ddd
555555555555 eee
666666666666 fff

命令執行前后暫存空間和模式空間的變化情況:

命令     暫存空間                                         模式空間
x           執行前:null 執行后:ccc/n              執行前:ccc/n 執行后:null
p          執行前:null 執行后:ccc/n              執行前:ccc/n 執行后:null 輸出一個空行
x          執行前:ccc/n 執行后:null              執行前:null 執行后:ccc/n 輸出ccc所在行

(注:把ccc所在行簡寫為ccc)

刪除偶數行:

sed '{n;d;}' datafile
111111111111 aaa
333333333333 ccc
555555555555 eee

執行n后打印第一行,然后讀入第二行執行d命令,即刪除此行;然后在執行n打印第三行,然后讀入第四行執行d命令,依此類推。

在偶數行后添加一新行:

sed '{n;G;}' datafile
111111111111 aaa
222222222222 bbb

333333333333 ccc
444444444444 ddd

555555555555 eee
666666666666 fff

執行 n 以后將第一行輸出到標準輸出以后,然后第二行進入模式空間,根據前面對 G 的解釋,會在第二行后面插入一個空行,然后輸出;再執行 n 將第三行輸出到標準輸出,然后第四行進入模式空間,并插入空行,依此類推。
相應的:sed '{n;n;G;}' datafile 表示在文件的第 3,6,9,12,… 行后面插入一個空行。

將偶數行置空:

sed '{n;g;}' datafile
111111111111 aaa

333333333333 ccc

555555555555 eee

執行n后打印第一行,然后讀入第二行執行g命令,g命令用暫存空間內容(null)來替換當前模式空間,即第二行被置空。其它行依此類推。

合并偶數行到上一行:

sed '{N;s//n//t/;}' datafile
111111111111 aaa 222222222222 bbb
333333333333 ccc 444444444444 ddd
555555555555 eee 666666666666 fff

執行N,將第二行追加到模式空間的第一行后,此時模式空間用兩行,然后執行替換(s)將第一個換行符替換成tab。其它行依此類推。

加行號,大致相當于cat -n datafile:

sed = datafile
1
111111111111 aaa
2
222222222222 bbb
3
333333333333 ccc
4
444444444444 ddd
5
555555555555 eee
6
666666666666 fff

sed = datafile |sed '{N;s//n//t/;}'
1 111111111111 aaa
2 222222222222 bbb
3 333333333333 ccc
4 444444444444 ddd
5 555555555555 eee
6 666666666666 fff

輸出文件最后2行,相當于 tail -2 datafile

sed '{$!N;$!d;}' datafile
555555555555 eee
666666666666 fff

sed '{$!N;$!d;}' : 對文件倒數第二行以前的行來說,N 將當前行的下一行追加到模式空間中以后,D 就將模式空間的內容刪除了;到倒數第二行的時候,將最后一行追加到倒數第二行下面,然后最后一行不執行 d(!對所選行-此處是最后一行,以外的行執行命令) ,所以文件的最后兩行都保存下來了。

將文件的行反序顯示,相當于 tac 命令:

sed '{1!G;h;$!d;}' datafile
666666666666 fff
555555555555 eee
444444444444 ddd
333333333333 ccc
222222222222 bbb
111111111111 aaa

1!G表示除了第一行以外,其余行都執行G命令;$!d表示除了最后一行以外,其余行都執行d命令。

看一下sed '{1!G;h;$!d;}'命令執行過程中暫存空間與模式空間的變化:

處理行        命令         暫存空間                                                                          模式空間
第一行        h;d           執行前:null 執行后:aaa/n                                             執行前:aaa/n 執行后:null
第二行        G;h;d       執行前:aaa 執行后:bbb/n1111/n                                 執行前:bbb/n 執行后:null
最后一行    G;h          執行前:eee/n…aaa/n 執行后:fff/n…bbb/n/aaa/n       執行前:eee/n 執行后:fff/n…bbb/n/aaa/n

(注:把各個行簡寫了)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
自拍偷拍亚洲在线| 日韩69视频在线观看| 欧美丝袜一区二区三区| 51午夜精品视频| 国产精品揄拍一区二区| 乱亲女秽乱长久久久| 亚洲人精选亚洲人成在线| 国产成人精品电影| 欧美在线激情视频| 国产精品69精品一区二区三区| 伊人av综合网| 久久91亚洲人成电影网站| 亚洲国产日韩欧美在线图片| 日韩色av导航| 国产免费一区二区三区在线观看| 久久精品亚洲94久久精品| 亚洲精品www久久久| 亚洲综合中文字幕68页| 日韩电影中文字幕av| 色yeye香蕉凹凸一区二区av| 日韩网站在线观看| 日韩久久精品成人| 欧美一级bbbbb性bbbb喷潮片| 久久这里有精品视频| 在线观看国产精品91| 亚洲精品久久7777777| 欧美成人在线免费视频| 久久久精品国产| 久久香蕉国产线看观看网| 国产精品视频区| 亚洲精品久久久久| 久久久欧美一区二区| 欧美精品在线观看| 日韩一区二区在线视频| 国产精品黄色av| 国产视频精品一区二区三区| 黄色精品一区二区| 午夜美女久久久久爽久久| 国产亚洲精品一区二区| 麻豆一区二区在线观看| 久国内精品在线| 国产在线999| 精品一区二区三区电影| 国产精品丝袜久久久久久高清| 亚洲成人教育av| 96精品久久久久中文字幕| 欧美午夜美女看片| 国产91九色视频| 中文字幕日韩av综合精品| 国产69精品久久久久久| 日韩视频免费在线| 国产美女久久精品| 精品久久久久久久久久久久久久| 国产免费一区二区三区在线能观看| 国产精品久久久久久久久男| 成人国产精品日本在线| 久久精品亚洲一区| 日韩美女视频免费在线观看| 国产亚洲欧美视频| 国产a级全部精品| 日韩av免费一区| 亚洲曰本av电影| 在线观看国产欧美| 中文字幕亚洲一区二区三区五十路| 亚洲一区美女视频在线观看免费| 97色在线播放视频| 色琪琪综合男人的天堂aⅴ视频| 国产欧美一区二区三区视频| 日韩欧美在线字幕| 国产精品黄视频| 亚洲女人天堂视频| 97精品国产91久久久久久| 久久国产精品偷| 中文字幕久热精品视频在线| 久久综合免费视频| 久久影院中文字幕| 伊人青青综合网站| 一级做a爰片久久毛片美女图片| 97视频免费观看| 久久亚洲综合国产精品99麻豆精品福利| 国产精品免费久久久久影院| 国产精品一区二区3区| 国产日韩在线精品av| 亚洲欧美国产制服动漫| 精品美女久久久久久免费| 亚洲人永久免费| 亚洲区在线播放| 久久久久久久久久久人体| 日韩成人在线电影网| 精品国产乱码久久久久久婷婷| 色综合久久久888| 欧美一级大胆视频| 亚洲第一福利网站| 欧美理论电影网| 欧美超级乱淫片喷水| 国产欧美日韩91| 日产日韩在线亚洲欧美| 国产欧美日韩丝袜精品一区| 日韩高清欧美高清| 国产成人91久久精品| 国产在线播放不卡| 欧美大片免费看| 国产成人精彩在线视频九色| 中文字幕亚洲综合| 亚洲精品www久久久久久广东| 欧美成人午夜免费视在线看片| 亚洲第一国产精品| 欧美精品在线观看| 韩日欧美一区二区| 亚洲成人精品在线| 亚洲精品一区av在线播放| 黄色一区二区三区| 一区二区三区久久精品| 91精品视频在线看| 午夜精品一区二区三区在线视频| 久久精品成人动漫| 国产精品视频公开费视频| 久热99视频在线观看| 九九热精品视频| 欧美性视频在线| 亚洲欧美精品suv| 国产精品丝袜久久久久久不卡| 亚洲综合小说区| 欧美限制级电影在线观看| 亚洲香蕉av在线一区二区三区| 亚洲加勒比久久88色综合| 欧美电影免费观看电视剧大全| 一本色道久久88综合亚洲精品ⅰ| 国产精品一久久香蕉国产线看观看| 伊人伊人伊人久久| 欧美日韩精品在线视频| 欧美中文在线视频| 亚洲天堂av在线免费| 欧美在线视频免费| 日韩av在线免费观看一区| 久久手机精品视频| 国产成人av网| 国产91网红主播在线观看| 日本欧美一二三区| 亚洲在线一区二区| 欧美亚洲国产另类| 精品视频一区在线视频| 亚洲国产欧美在线成人app| 中文字幕在线看视频国产欧美| 欧美一级免费看| 最近的2019中文字幕免费一页| 亚洲视频自拍偷拍| 亚洲综合精品一区二区| 亚洲成人久久电影| 高跟丝袜一区二区三区| 国产又爽又黄的激情精品视频| www.日韩不卡电影av| 国产在线98福利播放视频| 伊人男人综合视频网| 亚洲美女激情视频| 国产亚洲成av人片在线观看桃| 欧美老肥婆性猛交视频| 日韩精品黄色网| 久久艹在线视频| 另类专区欧美制服同性| 国产精品一区二区久久久| 91av在线免费观看| 日韩电影中文 亚洲精品乱码| 亚洲一区二区三区四区视频|