Linux sed 使用大全

sed 一種流向編輯器 stream editor,是Linux中三大文件處理工具(awk, sed, grep)之一炊苫,能配合正則表達(dá)式,對(duì)文件處理發(fā)揮重要作用搪搏。

sed 流式處理過程分成讀取洪碳,執(zhí)行递览,展示三個(gè)階段;

????1. sed讀取是從輸入流(文件瞳腌,管道绞铃,標(biāo)準(zhǔn)輸入)讀取一行并存儲(chǔ)到它叫模式空間pattern buffer中。

? ? 2. sed執(zhí)行嫂侍,默認(rèn)情況下儿捧,所有的SED命令都在模式空間中順序的執(zhí)行,除非指定了行的地址,否則SED命令將會(huì)在所有的行上依次執(zhí)行。

? ? 3. sed?發(fā)送修改后的內(nèi)容到輸出流搁宾。在發(fā)送數(shù)據(jù)之后发笔,模式空間將會(huì)被清空。在文件所有的內(nèi)容都被處理完成之前钾腺,上述過程將會(huì)重復(fù)執(zhí)行。

sed 以行為單位進(jìn)行文本處理,可以對(duì)數(shù)據(jù)進(jìn)行刪除临谱,替換,新增奴璃,選取等吴裤,配合正則,功力大增溺健,有沒有想一試身手呢麦牺,接下來我們就好好來盤一盤sed。

一.執(zhí)行流程示例

打印內(nèi)容

sed '' test? 文件讀取到模式空間后鞭缭,沒有任何腳本來處理剖膳,直接將模式空間內(nèi)容直接輸出到屏幕

接收輸入

sed ''? ?接收標(biāo)準(zhǔn)輸入的內(nèi)容,并進(jìn)行腳本處理岭辣,這里的腳本是空吱晒,所以不處理,直接輸出到屏幕

二.sed 的兩種執(zhí)行方式

sed [-n] [-e] 'command(s)' files??

sed [-n] -f scriptfile files

第一種方式是在命令行中使用沦童,第二種方式是在SED腳本文件中使用仑濒;兩種執(zhí)行方式可以同時(shí)使用。

文件:

$ cat test

aaa

ddd

222

sss

12ds45

方式一:

sed??-e '1d' -e '2d' -e '3d' test

sss

12ds45

方式二:

echo -e "1d\n2d\n3d" > commands.txt

sed -f commands.txt test

sss

12ds45

三.sed 命令行參數(shù)

-n 默認(rèn)情況下偷遗,模式空間中的內(nèi)容在處理完成后將會(huì)打印到標(biāo)準(zhǔn)輸出墩瞳,該選項(xiàng)用于阻止該行為

-e 指定要執(zhí)行的命令,使用該參數(shù)氏豌,我們可以指定多個(gè)命令喉酌,讓我們打印每一行兩次:

sed -e '' -e 'p' quote.txt

-n, --quiet, --slient:與標(biāo)準(zhǔn)的-n選項(xiàng)相同

-e script,--expression=script:與標(biāo)準(zhǔn)的-e選項(xiàng)相同

-f script-file泪电, --file=script-file:與標(biāo)準(zhǔn)的-f選項(xiàng)相同

--follow-symlinks:如果提供該選項(xiàng)的話般妙,在編輯的文件是符號(hào)鏈接時(shí),SED將會(huì)跟隨鏈接

-i[SUFFIX]相速,--in-place[=SUFFIX]:該選項(xiàng)用于對(duì)當(dāng)前文件進(jìn)行編輯碟渺,如果提供了SUFFIX的話,將會(huì)備份原始文件突诬,否則將會(huì)覆蓋原始文件

-l N止状, --line-lenght=N:該選項(xiàng)用于設(shè)置行的長(zhǎng)度為N個(gè)字符

--posix:該選項(xiàng)禁用所有的GNU擴(kuò)展

-r,--regexp-extended:該選項(xiàng)將啟用擴(kuò)展的正則表達(dá)式

-u攒霹, --unbuffered:指定該選項(xiàng)的時(shí)候怯疤,SED將會(huì)從輸入文件中加載最少的數(shù)據(jù),并且更加頻繁的刷出到輸出緩沖區(qū)催束。在編輯tail -f命令的輸出集峦,你不希望等待輸出的時(shí)候該選項(xiàng)是非常有用的。

-z抠刺,--null-data:默認(rèn)情況下塔淤,SED對(duì)每一行使用換行符分割,如果提供了該選項(xiàng)的話速妖,它將使用NULL字符分割行


四. sed 基本命令

本章將會(huì)講解一些常用的SED命令高蜂,主要包括DELETE,WRITE罕容,APPEND备恤,CHANGE,INSERT锦秒,TRANSLATE露泊,QUIT,READ旅择,EXECUTE等命令

1.刪除 d

格式:?[address1[,address2]]d

$: sed 'd' test.txt 刪除模式空間中的每一行惭笑,源文件不變

$: sed '4d' test.txt 刪除第四行

$: sed '4,9d' test.txt 刪除第四行到第九行

$: sed '/Time/,/Good/d' 刪除以Time 和Good開頭的行

2.替換 s

格式:[address1[,address2]]s/pattern/replacement/[flags]

sed 's/,/ | /g'?test.txt? ? g:表示對(duì)所有內(nèi)容進(jìn)行替換

sed 's/,/|/ 2 ' test.txt?? ? 2: 表示只替換每行中第二個(gè)逗號(hào)

sed -n 's/genome/gene/p' test.txt?? p: 只輸出改變的行

sed -n 's/genome/gene/w junk.txt' test.txt?? w: 替換后輸出的內(nèi)容儲(chǔ)存到新的文件

sed -n 's/genome/gene/pi' test.txt? ? ? ? ? ? ?i: 匹配大小寫

3.寫入 w

格式:[address1[,address2]]w file

w 指定是寫命令, file 指的是存儲(chǔ)文件內(nèi)容的文件名生真。使用 file 操作符的時(shí)候要小心沉噩,當(dāng)提供了文件名但是文件不存在的時(shí)候它會(huì)自動(dòng)創(chuàng)建,如果已經(jīng)存在的話則會(huì)覆蓋原文件的內(nèi)容柱蟀。

$: sed -n 'w books.bak' books.txt? 創(chuàng)建 books.txt的副本

4.正則表達(dá)式

^ 行首

$ 行尾

. 行單個(gè)字符(除行尾外)

[]?匹配字符集

[^]??排除字符集

[-]??字符范圍

??川蒙,\+?,*? ?分別對(duì)應(yīng)0次到1次产弹,一次到多次派歌,0次到多次匹配

{n}?,{n,}?痰哨,{m, n}??精確匹配N次胶果,至少匹配N次,匹配M-N次?

| 或

\s?匹配單個(gè)空白內(nèi)容

\S?匹配單個(gè)非空白內(nèi)容斤斧。

\w?早抠,?\W?單個(gè)單詞、非單詞撬讽。

5.常用代碼塊

a.除去空白行

$: echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'

b.刪除連續(xù)空白行

$: echo -e "Line #1\n\n\nLine #2" | sed '/./,/^$/!d'

五. 參考文獻(xiàn)

https://www.gnu.org/software/sed/manual/sed.html#index-Copy-hold-space-into-pattern-space-168

https://github.com/mylxsw/growing-up/blob/master/doc/%E4%B8%89%E5%8D%81%E5%88%86%E9%92%9F%E5%AD%A6%E4%BC%9ASED.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蕊连,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子游昼,更是在濱河造成了極大的恐慌甘苍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烘豌,死亡現(xiàn)場(chǎng)離奇詭異载庭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)廊佩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門囚聚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人标锄,你說我怎么就攤上這事顽铸。” “怎么了料皇?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵谓松,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我践剂,道長(zhǎng)毒返,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任舷手,我火速辦了婚禮拧簸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘男窟。我一直安慰自己盆赤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布歉眷。 她就那樣靜靜地躺著牺六,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汗捡。 梳的紋絲不亂的頭發(fā)上淑际,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天畏纲,我揣著相機(jī)與錄音,去河邊找鬼春缕。 笑死盗胀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锄贼。 我是一名探鬼主播票灰,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宅荤!你這毒婦竟也來了屑迂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤冯键,失蹤者是張志新(化名)和其女友劉穎惹盼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惫确,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逻锐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雕薪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昧诱。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖所袁,靈堂內(nèi)的尸體忽然破棺而出盏档,到底是詐尸還是另有隱情,我是刑警寧澤燥爷,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布蜈亩,位于F島的核電站,受9級(jí)特大地震影響前翎,放射性物質(zhì)發(fā)生泄漏稚配。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一港华、第九天 我趴在偏房一處隱蔽的房頂上張望道川。 院中可真熱鬧,春花似錦立宜、人聲如沸冒萄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尊流。三九已至,卻和暖如春灯帮,著一層夾襖步出監(jiān)牢的瞬間崖技,已是汗流浹背逻住。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迎献,地道東北人瞎访。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像忿晕,于是被迫代替她去往敵國(guó)和親装诡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子银受,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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