linux sed命令詳解

linux sed命令詳解

1. Sed簡介

sed 是一種在線編輯器靠柑,它一次處理一行內(nèi)容隐砸。處理時(shí)扳炬,把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中吏颖,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容恨樟,處理完成后半醉,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行劝术,這樣不斷重復(fù)缩多,直到文件末尾。文件內(nèi)容并沒有 改變养晋,除非你使用重定向存儲(chǔ)輸出衬吆。Sed主要用來自動(dòng)編輯一個(gè)或多個(gè)文件;簡化對文件的反復(fù)操作绳泉;編寫轉(zhuǎn)換程序等逊抡。以下介紹的是Gnu版本的Sed 3.02。

2. 定址

可以通過定址來定位你所希望編輯的行零酪,該地址用數(shù)字構(gòu)成冒嫡,用逗號(hào)分隔的兩個(gè)行數(shù)表示以這兩行為起止的行的范圍(包括行數(shù)表示的那兩行)拇勃。如1,3表示1孝凌,2方咆,3行,美元符號(hào)($)表示最后一行胎许。范圍可以通過數(shù)據(jù)峻呛,正則表達(dá)式或者二者結(jié)合的方式確定 罗售。

3. Sed命令

1) 調(diào)用sed命令有兩種形式:    
2) sed [options] 'command' file(s)      
3) sed [options] -f scriptfile file(s)    
4) a\    在當(dāng)前行后面加入一行文本辜窑。    
5) b lable    分支到腳本中帶有標(biāo)記的地方,如果分支不存在則分支到腳本的末尾寨躁。    
6) c\    用新的文本改變本行的文本穆碎。    
7) d     從模板塊(Pattern space)位置刪除行。    
8) D    刪除模板塊的第一行职恳。    
9) i\    在當(dāng)前行上面插入文本所禀。    
10)  h    拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。    
11)  H    追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)    
12)  g    獲得內(nèi)存緩沖區(qū)的內(nèi)容放钦,并替代當(dāng)前模板塊中的文本色徘。    
13)  G    獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面操禀。    
14)  l    列表不能打印字符的清單褂策。    
15)  n    讀取下一個(gè)輸入行管跺,用下一個(gè)命令處理新的行而不是用第一個(gè)命令锁孟。    
16)  N    追加下一個(gè)輸入行到模板塊后面并在二者間嵌入一個(gè)新行,改變當(dāng)前行號(hào)碼诚镰。    
17)  p    打印模板塊的行揪惦。    
18)  P(大寫)    打印模板塊的第一行遍搞。    
19)  q    退出Sed。    
20)  r file    從file中讀行器腋。    
21)  t label    if分支溪猿,從最后一行開始,條件一旦滿足或者T纫塌,t命令再愈,將導(dǎo)致分支到帶有標(biāo)號(hào)的命令處,或者到腳本的末尾护戳。    
22)  T label    錯(cuò)誤分支翎冲,從最后一行開始,一旦發(fā)生錯(cuò)誤或者T媳荒,t命令抗悍,將導(dǎo)致分支到帶有標(biāo)號(hào)的命令處驹饺,或者到腳本的末尾。    
23)  w file    寫并追加模板塊到file末尾缴渊。    
24)  W file    寫并追加模板塊的第一行到file末尾赏壹。    
25)  !    表示后面的命令對所有沒有被選定的行發(fā)生作用。    
26)  s/re/string    用string替換正則表達(dá)式re衔沼。    
27)  =    打印當(dāng)前行號(hào)碼蝌借。    
28)  #    把注釋擴(kuò)展到下一個(gè)換行符以前。    

以下的是替換標(biāo)記

1)g表示行內(nèi)全面替換指蚁。    
2)p表示打印行菩佑。    
3)w表示把行寫入一個(gè)文件。    
4)x表示互換模板塊中的文本和緩沖區(qū)中的文本凝化。    
5)y表示把一個(gè)字符翻譯為另外的字符(但是不用于正則表達(dá)式)    

4. 選項(xiàng)

1)-e command, --expression=command    允許多臺(tái)編輯稍坯。    
2)-h, --help                          打印幫助,并顯示bug列表的地址搓劫。    
3)-n, --quiet, --silent    
4)取消默認(rèn)輸出瞧哟。    
5)-f, --filer=script-file    引導(dǎo)sed腳本文件名。    
6)-V, --version              打印版本和版權(quán)信息枪向。    

5. 元字符集

1)^錨定行的開始 如:/^sed/匹配所有以sed開頭的行勤揩。     
2)$ 錨定行的結(jié)束 如:/sed$/匹配所有以sed結(jié)尾的行。     
3).    匹配一個(gè)非換行符的字符 如:/s.d/匹配s后接一個(gè)任意字符秘蛔,然后是d陨亡。     
4)*    匹配零或多個(gè)字符 如:/*sed/匹配所有模板是一個(gè)或多個(gè)空格后緊跟sed的行。    
5)[]   匹配一個(gè)指定范圍內(nèi)的字符缠犀,如/[Ss]ed/匹配sed和Sed数苫。    
6)[^]   匹配一個(gè)不在指定范圍內(nèi)的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個(gè)字母開頭辨液,緊跟ed的行虐急。    
7)\(..\)   保存匹配的字符,如s/\(love\)able/\1rs滔迈,loveable被替換成lovers止吁。    
8)&   保存搜索字符用來替換其他字符,如s/love/**&**/燎悍,love這成**love**敬惦。     
9)\<      錨定單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行谈山。     
10)     \>      錨定單詞的結(jié)束俄删,如/love\>/匹配包含以love結(jié)尾的單詞的行。     
11)     x\{m\}  重復(fù)字符x,m次畴椰,如:/0\{5\}/匹配包含5個(gè)o的行臊诊。     
12)     x\{m,\} 重復(fù)字符x,至少m次,如:/o\{5,\}/匹配至少有5個(gè)o的行斜脂。     
13)     x\{m,n\}重復(fù)字符x抓艳,至少m次,不多于n次帚戳,如:/o\{5,10\}/匹配5--10個(gè)o的行玷或。    

6. 實(shí)例

1) 刪除:d命令

$ sed '2d' example-----刪除example文件的第二行。            
$ sed '2,$d' example-----刪除example文件的第二行到末尾所有行片任。    
$ sed '$d' example-----刪除example文件的最后一行偏友。    
$ sed '/test/'d example-----刪除example文件所有包含test的行。    

2) 替換:s命令

a)   sed 's/test/mytest/g' example-----在整行范圍內(nèi)把test替換為mytest蚂踊。如果沒有g(shù)標(biāo)記约谈,則只有每行第一個(gè)匹配的test被替換成mytest笔宿。    
b)   $ sed -n 's/^test/mytest/p' example-----(-n)選項(xiàng)和p標(biāo)志一起使用表示只打印那些發(fā)生替換的行犁钟。也就是說,如果某一行開頭的test被替換成mytest泼橘,就打印它涝动。      
c)   $ sed 's/^192.168.0.1/&localhost/' example-----&符號(hào)表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會(huì)被替換成它自已加 localhost炬灭,變成192.168.0.1localhost醋粟。    
d)   $ sed -n 's/\(love\)able/\1rs/p' example-----love被標(biāo)記為1,所有l(wèi)oveable會(huì)被替換成lovers重归,而且替換的行會(huì)被打印出來米愿。    
e)   $ sed 's#10#100#g' example-----不論什么字符,緊跟著s命令的都被認(rèn)為是新的分隔符鼻吮,所以育苟,“#”在這里是分隔符,代替了默認(rèn)的“/”分隔符椎木。表示把所有10替換成100违柏。    
f)   選定行的范圍:逗號(hào)    
g)   $ sed -n '/test/,/check/p' example-----所有在模板test和check所確定的范圍內(nèi)的行都被打印。    
h)   $ sed -n '5,/^test/p' example-----打印從第五行開始到第一個(gè)包含以test開始的行之間的所有行香椎。    
i)   $ sed '/test/,/check/s/$/sed test/' example-----對于模板test和west之間的行漱竖,每行的末尾用字符串sed test替換。  
j) $ sed 's/^\(.\)/\u\1/'  example ---------將每行開頭的第一個(gè)字母換成大寫

3) 編輯:e命令

a)  $ sed -e '1,5d' -e 's/test/check/' example-----(-e)選項(xiàng)允許在同一行里執(zhí)行多條命令畜伐。如例子所示馍惹,第一條命令刪除1至5行,第二條命令用check替換test。命令的執(zhí) 行順序?qū)Y(jié)果有影響万矾。如果兩個(gè)命令都是替換命令肥照,那么第一個(gè)替換命令將影響第二個(gè)替換命令的結(jié)果。    
b)  $ sed --expression='s/test/check/' --expression='/love/d' example-----一個(gè)比-e更好的命令是--expression勤众。它能給sed表達(dá)式賦值舆绎。    

4) 從文件讀入:r命令

a)  $ sed '/test/r file' example-----file里的內(nèi)容被讀進(jìn)來,顯示在與test匹配的行后面们颜,如果匹配多行吕朵,則file的內(nèi)容將顯示在所有匹配行的下面。    
b)  寫入文件:w命令    
c)  $ sed -n '/test/w file' example-----在example中所有包含test的行都被寫入file里窥突。    

5) 追加命令:a命令

a)   $ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test開頭的行后面努溃,sed要求命令a后面有一個(gè)反斜杠。    

6) 插入:i命令

a)  $ sed '/test/i\\    
b)  new line    
c)  -------------------------' example    
d)  如果test被匹配阻问,則把反斜杠后面的文本插入到匹配行的前面梧税。    

7) 下一個(gè)n命令

a)  $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,則移動(dòng)到匹配行的下一行称近,替換這一行的aa第队,變?yōu)閎b,并打印該行刨秆,然后繼續(xù)凳谦。    

8) 變形:y命令

a)  $ sed '1,10y/abcde/ABCDE/' example-----把1--10行內(nèi)所有abcde轉(zhuǎn)變?yōu)榇髮懀⒁夂馕矗齽t表達(dá)式元字符不能使用這個(gè)命令尸执。    

9) 退出:q命令

a)  $ sed '10q' example-----打印完第10行后,退出sed缓醋。    

10) 保持和獲热缡А:h命令和G命令

a)  $ sed -e '/test/h' -e '$G example-----

在sed處理文件的時(shí)候,每一行都被保存在一個(gè)叫模式空間的臨時(shí)緩沖區(qū)中送粱,除非行被刪除或者輸出被取消褪贵,否則所有被處理的行都將 打印在屏幕上。接著模式空間被清空葫督,并存入新的一行等待處理竭鞍。在這個(gè)例子里,匹配test的行被找到后橄镜,將存入模式空間偎快,h命令將其復(fù)制并存入一個(gè)稱為保 持緩存區(qū)的特殊緩沖區(qū)內(nèi)。第二條語句的意思是洽胶,當(dāng)?shù)竭_(dá)最后一行后晒夹,G命令取出保持緩沖區(qū)的行裆馒,然后把它放回模式空間中,且追加到現(xiàn)在已經(jīng)存在于模式空間中 的行的末尾丐怯。在這個(gè)例子中就是追加到最后一行喷好。簡單來說,任何包含test的行都被復(fù)制并追加到該文件的末尾读跷。

11) 保持和互換:h命令和x命令

a)  $ sed -e '/test/h' -e '/check/x' example -----互換模式空間和保持緩沖區(qū)的內(nèi)容梗搅。也就是把包含test與check的行互換。    

7. 腳本

Sed腳本是一個(gè)sed的命令清單效览,啟動(dòng)Sed時(shí)以-f選項(xiàng)引導(dǎo)腳本文件名无切。Sed對于腳本中輸入的命令非常挑剔,在命令的末尾不能有任何空白或文本丐枉,如果在一行中有多個(gè)命令哆键,要用分號(hào)分隔。以#開頭的行為注釋行瘦锹,且不能跨行籍嘹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辱士,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抽兆,老刑警劉巖识补,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件族淮,死亡現(xiàn)場離奇詭異辫红,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)祝辣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門贴妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝙斜,你說我怎么就攤上這事名惩。” “怎么了孕荠?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵娩鹉,是天一觀的道長。 經(jīng)常有香客問我稚伍,道長弯予,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任个曙,我火速辦了婚禮锈嫩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己呼寸,他們只是感情好艳汽,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著对雪,像睡著了一般河狐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瑟捣,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天甚牲,我揣著相機(jī)與錄音,去河邊找鬼蝶柿。 笑死丈钙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的交汤。 我是一名探鬼主播雏赦,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芙扎!你這毒婦竟也來了星岗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤戒洼,失蹤者是張志新(化名)和其女友劉穎俏橘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圈浇,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寥掐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷蜀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片召耘。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖褐隆,靈堂內(nèi)的尸體忽然破棺而出污它,到底是詐尸還是另有隱情,我是刑警寧澤庶弃,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布衫贬,位于F島的核電站,受9級特大地震影響歇攻,放射性物質(zhì)發(fā)生泄漏固惯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一掉伏、第九天 我趴在偏房一處隱蔽的房頂上張望缝呕。 院中可真熱鬧澳窑,春花似錦、人聲如沸供常。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栈暇。三九已至麻裁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間源祈,已是汗流浹背煎源。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留香缺,地道東北人手销。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像图张,于是被迫代替她去往敵國和親锋拖。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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

  • Linux sed命令是利用script來處理文本文件祸轮。sed可依照script的指令兽埃,來處理、編輯文本文件适袜。Se...
    姜淑均閱讀 730評論 1 2
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,176評論 2 33
  • 知識(shí)點(diǎn) sort uniq cut wc sed命令 awk命令 crontab定時(shí)器 sort sort 命令對...
  • 刪除:d命令 $ sed ‘2d’example —–刪除example文件的第二行柄错。 $ sed ‘2,$d’e...
    邱坨坨閱讀 213評論 0 0
  • 本文承接之前寫的三十分鐘學(xué)會(huì)AWK一文,在學(xué)習(xí)完AWK之后苦酱,趁熱打鐵又學(xué)習(xí)了一下SED售貌,不得不說這兩個(gè)工具真的堪稱...
    mylxsw閱讀 4,401評論 3 74