欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

sed模式空間和暫存空間的區(qū)別

 更新時間:2013年01月23日 18:11:39   作者:  
很多朋友對sed模式空間和暫存空間的區(qū)別不是很清楚,這里簡單的介紹下,方便需要的朋友

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

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

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

注意:暫存空間里默認(rèn)存儲一個空行。

下面是一些例子:

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行被讀入模式空間,執(zhí)行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

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

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

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

刪除偶數(shù)行:

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

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

在偶數(shù)行后添加一新行:

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

333333333333 ccc
444444444444 ddd

555555555555 eee
666666666666 fff

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

將偶數(shù)行置空:

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

333333333333 ccc

555555555555 eee

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

合并偶數(shù)行到上一行:

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

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

加行號,大致相當(dāng)于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行,相當(dāng)于 tail -2 datafile

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

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

將文件的行反序顯示,相當(dāng)于 tac 命令:

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

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

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

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

(注:把各個行簡寫了)

相關(guān)文章

  • shell實現(xiàn)貪吃蛇的示例代碼

    shell實現(xiàn)貪吃蛇的示例代碼

    本文主要介紹了shell實現(xiàn)貪吃蛇的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • linux下監(jiān)視進(jìn)程 崩潰掛掉后自動重啟的shell腳本

    linux下監(jiān)視進(jìn)程 崩潰掛掉后自動重啟的shell腳本

    如何保證服務(wù)一直運行?如何保證即使服務(wù)掛掉了也能自動重啟?在寫服務(wù)程序時經(jīng)常會碰到這樣的問題。在Linux系統(tǒng)中,強(qiáng)大的shell就可以很靈活的處理這樣的事務(wù)
    2013-06-06
  • Bash Shell腳本學(xué)習(xí)小結(jié)

    Bash Shell腳本學(xué)習(xí)小結(jié)

    今天需要寫一個Shell腳本。很簡單,判斷一個日志文件是否大大于2G,如果大于2G則刪除。久了沒有寫bash,竟然一點都想不起來寫了。于是復(fù)習(xí)了一下,下面對今天的學(xué)習(xí)做個小結(jié)
    2013-01-01
  • linux?shell編程指南之字符串與數(shù)組

    linux?shell編程指南之字符串與數(shù)組

    這篇文章主要給大家介紹了關(guān)于linux?shell編程指南之字符串與數(shù)組的相關(guān)資料,字符串與數(shù)組是Shell編程中常用的數(shù)據(jù)類型,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Shell執(zhí)行腳本并輸出日志文件的方法

    Shell執(zhí)行腳本并輸出日志文件的方法

    這篇文章主要介紹了Shell執(zhí)行腳本并輸出日志文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Linux命令之cat和tail的用法介紹

    Linux命令之cat和tail的用法介紹

    這篇文章主要,給大家?guī)淼氖?Linux?命令系列,要介紹的是兩個常用的查看文件內(nèi)容的命令:cat?和?tail?命令,文中代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 編寫shell腳本實現(xiàn)tomcat定時重啟的方法

    編寫shell腳本實現(xiàn)tomcat定時重啟的方法

    這篇文章主要介紹了編寫shell腳本實現(xiàn)tomcat定時重啟的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Linux下服務(wù)器重啟的腳本命令

    Linux下服務(wù)器重啟的腳本命令

    Linux關(guān)閉和重啟系統(tǒng)一般使用相同的命令可以實現(xiàn)。下面腳本之家小編給大家?guī)砹薒inux下服務(wù)器重啟的腳本命令,感興趣的朋友一起看看吧
    2017-09-09
  • Linux中的搜索文件命令

    Linux中的搜索文件命令

    這篇文章主要介紹了Linux中的搜索文件命令的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • ubuntu與centos中更換ip的shell代碼

    ubuntu與centos中更換ip的shell代碼

    ubuntu與centos中更換ip的shell代碼,需要的朋友可以參考下
    2013-02-02

最新評論