Linux之sed模式空間

  • 前言
    sed有兩個(gè)內(nèi)置的存儲空間:一是 “模式空間”天试,二是 “保持空間”氛什,這篇主要講解 “模式空間”朴上,你可能會問為啥不講 “保持空間” 哪秦踪?那是因?yàn)槲以谀壳暗墓ぷ骱蛯W(xué)習(xí)中沒有遇到 “保持空間” 的案例机错,我也找不到什么合適的例子爬范,那就等遇到再學(xué)嘍!故本文就重點(diǎn)介紹應(yīng)用于sed “模式空間” 的兩個(gè)命令Nn
  1. 模式空間的概念
    模式空間:sed工具從文件讀取一行文本然后存入的緩沖區(qū)弱匪,然后命令操作模式空間的內(nèi)容青瀑,在初始狀態(tài)下模式空間是沒有內(nèi)容的,在每次循環(huán)讀取數(shù)據(jù)的過程中萧诫,模式空間都會被清空并寫入新的內(nèi)容(這里補(bǔ)充一點(diǎn)斥难,sed命令操作就是 “模式空間” 而不是內(nèi)存,這就是為什么sed不會改變原文件內(nèi)容的原因帘饶,如果想改變原文件內(nèi)容需要加-i選項(xiàng))

  2. sed工具的執(zhí)行流程圖

    24801412821380580.png

  1. 命令n
    清空當(dāng)前模式空間哑诊,然后讀入下一行(如果sed語句遇到n命令會改變正常的執(zhí)行流程),執(zhí)行流程如下:
    657782432329429924.png

    代碼示例(無論是n還是N命令都不要用多少多少行的思維來思考,sed語句是循環(huán)讀取文件的,應(yīng)該用循環(huán)的思維來思考問題)
(1)使用sed命令打印文件內(nèi)容
etl@bejedw09:/home/etl/cya_2/as/one> sed -n "p" test
0001
0002
0003
0004
0005
0006
0007
0008

(2)使用n命令
etl@bejedw09:/home/etl/cya_2/as/one> sed -n "n;p" test
0002
0004
0006
0008

結(jié)合上面流程圖解釋sed -n "n;p" test這條命令:
第一次循環(huán)及刻,sed語句讀入第一行镀裤,跳過穷当,讀入第二行,打印輸出淹禾,
第二次循環(huán)馁菜,sed語句讀入第三行,跳過铃岔,讀入第四行汪疮,打印輸出,
第三次循環(huán)毁习,sed語句讀入第五行智嚷,跳過,讀入第六行纺且,打印輸出盏道,
第四次循環(huán),sed語句讀入第七行载碌,跳過猜嘱,讀入第八行,打印輸出嫁艇,
所以才會變成打印出文件的偶數(shù)行朗伶,打印文件的奇數(shù)行是sed -n "p;n" test,這里還是很有必要解釋下打印奇數(shù)行的這條命令步咪,首先是p命令打印文件第一行论皆,然后是n命令在模式空間內(nèi)刪除第一行,讀入第二行猾漫,注意現(xiàn)在模式空間內(nèi)存在的是文件的第二行數(shù)據(jù)点晴,但是sed語句本次循環(huán)已經(jīng)執(zhí)行完畢,進(jìn)入第二次循環(huán)悯周,在第二次循環(huán)開始時(shí)清空模式空間粒督,然后讀入文件第三行,然后打印文件第三行队橙,然后以此類推......坠陈,所以才會打印文件的奇數(shù)行,更多關(guān)于打印文件奇偶行的操作請關(guān)注我的另一篇文章 《 Linux之a(chǎn)wk三元運(yùn)算符和打印奇偶行
再看下一段代碼

etl@bejedw09:/home/etl/cya_2/as/one> sed -n "2n;p" test
0001
0003
0004
0005
0006
0007
0008
#在循環(huán)到文件第二行的時(shí)候跳過然后讀入第三行打印捐康,后面的依次打印仇矾,因?yàn)?n代表的是在讀入文件
#第二行的時(shí)候才執(zhí)行n命令,其余行的時(shí)候都是正常執(zhí)行打印操作
  1. 命令N
    不清空當(dāng)前模式空間解总,然后讀入下一行贮匕,以\n分隔兩行(如果sed語句遇到N命令會改變正常的執(zhí)行流程),執(zhí)行流程如下:
    112318452027417218.png

    關(guān)于N命令結(jié)合一個(gè)需求給大家演示一個(gè)例子
etl@bejedw09:/home/etl/cya_2/as/one> cat test
Bob
man
Alice
woman
Peter
man
Julie
woman
#這段文本花枫,奇數(shù)行是人名刻盐,偶數(shù)行是性別掏膏,需求是將人名和對應(yīng)的性別打印在一行,中間用"--"隔開

(1)N命令一
etl@bejedw09:/home/etl/cya_2/as/one> cat test | sed -n "N;p"
Bob
man
Alice
woman
Peter
man
Julie
woman

(2)N命令二
etl@bejedw09:/home/etl/cya_2/as/one> cat test | sed -n "N;s/\n/--/;p"
Bob--man
Alice--woman
Peter--man
Julie--woman

在這里解釋下上面的兩條命令敦锌,我相信聰明的小伙伴看到這里已經(jīng)看出端倪了吧^_^馒疹,那就是我上面提到過的N命令的特點(diǎn)不清空當(dāng)前模式空間,然后讀入下一行乙墙,以\n分隔兩行所以在循環(huán)讀取文件時(shí)模式空間中存儲的內(nèi)容分別是:

Bob\nman
Alice\nwoman
Peter\nman
Julie\nwoman

所以使用seds命令(替換命令)颖变,將\n替換成--就可以完成需求

  • 結(jié)尾
    本文主要講解sed命令的 “模式空間” 并介紹了兩個(gè)命令Nn听想,由于本文的內(nèi)容有些抽象腥刹,不過篇幅太長會影響大家的閱讀感,所以本文就不在這里啰嗦了汉买,如果看到本文且有不明白的地方衔峰,歡迎大家留言提問!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛙粘,一起剝皮案震驚了整個(gè)濱河市垫卤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌组题,老刑警劉巖葫男,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崔列,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)旺遮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門赵讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耿眉,你說我怎么就攤上這事边翼。” “怎么了鸣剪?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵组底,是天一觀的道長。 經(jīng)常有香客問我筐骇,道長债鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任铛纬,我火速辦了婚禮厌均,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘告唆。我一直安慰自己棺弊,他們只是感情好晶密,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著模她,像睡著了一般稻艰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侈净,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天尊勿,我揣著相機(jī)與錄音,去河邊找鬼用狱。 笑死运怖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夏伊。 我是一名探鬼主播摇展,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溺忧!你這毒婦竟也來了咏连?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鲁森,失蹤者是張志新(化名)和其女友劉穎祟滴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歌溉,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垄懂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痛垛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片草慧。...
    茶點(diǎn)故事閱讀 40,926評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匙头,靈堂內(nèi)的尸體忽然破棺而出漫谷,到底是詐尸還是另有隱情,我是刑警寧澤蹂析,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布舔示,位于F島的核電站,受9級特大地震影響电抚,放射性物質(zhì)發(fā)生泄漏惕稻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一喻频、第九天 我趴在偏房一處隱蔽的房頂上張望缩宜。 院中可真熱鬧,春花似錦、人聲如沸锻煌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宋梧。三九已至匣沼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捂龄,已是汗流浹背释涛。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倦沧,地道東北人唇撬。 一個(gè)月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像展融,于是被迫代替她去往敵國和親窖认。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,176評論 2 33
  • 這篇是當(dāng)初看完Chinaunix論壇的帖子“拋磚引玉----翻譯加注sed1line”的筆記告希,最近無聊從Evern...
    magic5650閱讀 1,165評論 0 4
  • 一扑浸、前言 我們都知道,在Linux中一切皆文件燕偶,比如配置文件喝噪,日志文件,啟動(dòng)文件等等指么。如果我們相對這些文件進(jìn)行一些...
    以七v為書閱讀 1,524評論 0 5
  • 風(fēng)吹亂了你的頭發(fā) 雨打濕了你的身體 我看到了你眼眶的淚水 還有似是而非的孤傲 雜草搖 雜草搖 隨風(fēng)飄動(dòng) 與風(fēng)惺惺相惜
    一青雜記閱讀 117評論 1 4