想掌握強(qiáng)大的sed工具烛卧?收藏本文就夠了!

1. 如果要將sed編輯的結(jié)果寫入文件,需要-i參數(shù)总放,如果存在多個編輯指令呈宇,需要在前面添加-e參數(shù)

sed -i -e 's/hhhhh/hello/g' -i -e 's/ha/ho/g' test ,不能寫成-ie (注意:i 必須在e之前局雄,否則會報錯)

2. ?刪除最后一行 sed '$d' file(注意這里的$和vi編輯命令中使用字符串替換命令時的$意思類似甥啄,表示文件的最后一行,不是代表單純輸入$時表示跳到一行的末尾)

3. ?刪除所有行的命令sed ?'1,$d' file炬搭,如果配合-i則相當(dāng)于是清空文件(和vi編輯中?:1,$s/word1/word2/g類似蜈漓,但后者需要文檔中都是同樣的單詞)

4. ?sed中刪除第n行是sed 'nd' file(類似vi編輯命令中刪除一行是使用dd),反之需要僅僅保留某行時宫盔,輸入sed 'n!d' file

這里的感嘆號的使用也可以擴(kuò)展融虽,需要活學(xué)活用,比如使用在sed -n 'n!p'即表是將除了第N行之外的所有行打印出來灼芭。

另舉例如下:某文件夾下包含了如下的文件有额,中間的省略號表示包含2015時間的文件有很多

-rw-------. 1 billcs billcs??? 438512 10月 27 17:50 ABM_CMdbInUser.mdb.0058.20150926

-rw-------. 1 billcs billcs??? 438512 10月 27 17:40 ABM_CMdbInUser.mdb.0072.20151010

-rw-------. 1 billcs billcs??? 438512 10月 27 17:50 ABM_CMdbInUser.mdb.0080.20151018

-rw-------. 1 billcs billcs???? 29696 10月 27 17:53 ABM_CMdbInTidB.mdb

為了將所有不包含2015時間的文件顯示出來,可以使用如下的命令:

ls -l | sed -n '/2015/!p'

5. ?sed 's/linux/bowen/2' file ?表示對每一行第二個linux字符串進(jìn)行替換彼绷,不滿足條件即使處在整行第二的位置也不替換

注意:s/linux/bowen/的寫法其實默認(rèn)是省略了1巍佑,即和s/linux/bowen/1的含義是一致的,只將每一行的第一個linux進(jìn)行替換寄悯,如果寫成2的話則就是上面的意思了萤衰。

6. ?刪除包含某字符串的行sed '/str1/d' file(這也和vi編輯中s/str1/str2/g類似,前面的s和后面的g都是替換字符串需要的猜旬,而這里是/d脆栋,且/str1就是要將str1找出來并換成str2,而sed中執(zhí)行刪除時不是替換洒擦,僅需要找出str1出來而已)

被替換的str1不需要是完整顯示且前后都是空白的字符串筹吐,可以只是完整字符串其中的一部分,例如:

file內(nèi)容為

line1?? 1?????? 2?????? 3?????? 4

line2?? hello?? nihao?? haha??? bye

line3 ? xilineha ? linux?? bowen??? xixi

line4?? bowen?? unix??? linux?? haha

執(zhí)行sed 's/line/hoho/2' file秘遏,結(jié)果為:

line1?? 1?????? 2?????? 3?????? 4

line2?? hello?? nihao?? haha??? bye

line3 ? xihohoha ? linux?? bowen??? xixi

line4?? bowen?? unix??? linux?? haha

即只將第三行第二個字符串中的一部分line替換成了hoho

7. ?刪除空行 sed '/^$/d' file(不包括空格,TAB和控制字符行

8. ?sed字符轉(zhuǎn)換的用法 ?sed 'y/1234/ABCD/' file

1)可以這么記憶y嘉竟,相當(dāng)于是每替換一個字母時都需要詢問確認(rèn)一下 y or n?(切記是將全文每個對應(yīng)的字符都替換邦危,而不是只替換1234字符串

2)和tr相比較,本命令的缺點就是轉(zhuǎn)換字符和被轉(zhuǎn)換字符長度一定要相等

9. ?sed '/linux/a gbh' file和sed '/linux/a\gbh' file效果一樣(a表示在匹配行的下一行添加內(nèi)容舍扰,i表示在上一行添加內(nèi)容)

10. ?讀取外部文件test時倦蚪,如果test和file在同一個路徑下,可以直接添加單引號边苹,不需要輸入./test陵且,如下:

sed '/line1/r 'test'' file

建議直接使用絕對路徑而不添加單引號

11. 使用p打印命令時需要添加-n參數(shù),否則因為sed本身會默認(rèn)將所有的行都打印出來,又由于添加了p命令慕购,所以會使得結(jié)果中出現(xiàn)重復(fù)的行聊疲。

例如:輸入?sed '1p' file,由于未帶-n沪悲,第一行出現(xiàn)了重復(fù)

line1?? 1?????? 2?????? 3?????? 4

line1?? 1?????? 2?????? 3?????? 4

line2?? hello?? nihao?? haha??? bye

line3?? hellod? linux?? linux??? xixi

line4?? line5?? unix??? linux?? haha

12. ?sed -f sedrule file 將常用的指令寫入sedrule文件中获洲,通過-f參數(shù)就可以進(jìn)行調(diào)用,這實際上是將使用sed時單引號中的指令集中放到文件中殿如,便于使用贡珊,所以文件中的指令不需要再加單引號。例如:cat sedrule后顯示:

/^$/d

s/linux/bowen/g

13. ?替換匹配行的下一行 ?sed '/line2/{n;s/hello/bowen/}' file (n可以理解為next的意思

如果不添加n涉馁,直接是sed '/line2/{s/hello/bowen/}' file门岔,該命令的含義就是先定位到某一行,然后對本行進(jìn)行替換操作

14. l(L的小寫)表示列出非打印字符烤送,如常用的查看文件中TAB的命令 sed -n l file

15.?sed -n '$=' test.sh 獲取文件的總行數(shù)寒随,和awk 'END{print NR}' test.sh效果一樣

(這和ll | wc -l獲取的結(jié)果是有差異的,wc會比前兩者少1胯努,因為wc是計算當(dāng)前文件夾下的文件數(shù)再加上文件夾本身牢裳。前面兩個是獲取直觀的文件數(shù)和隱藏的.和..的總和)

16,動態(tài)獲取文件的每一行的內(nèi)容?sed -n "${n}p" test.sh 叶沛,其中n是變量蒲讯,所以必須使用雙引號

注意這里必須使用雙引號,如果n為1灰署,在使用sh -x調(diào)試時可以發(fā)現(xiàn)會打印成sed -n '1p' test.sh判帮,即雙引號此時解釋成了單引號

--END--

鑒于數(shù)據(jù)分析能力越來越成為每個職場人的必備技能,所以我最近新打造了本垂直公號溉箕,這里聚焦分享數(shù)據(jù)分析和腳本編程的干貨晦墙,歡迎大家都轉(zhuǎn)起來,讓更多的人來一起碰撞肴茄,交流晌畅,提升!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寡痰,一起剝皮案震驚了整個濱河市抗楔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拦坠,老刑警劉巖连躏,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贞滨,居然都是意外死亡入热,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勺良,“玉大人绰播,你說我怎么就攤上這事≈F” “怎么了幅垮?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尾组。 經(jīng)常有香客問我忙芒,道長,這世上最難降的妖魔是什么讳侨? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任呵萨,我火速辦了婚禮,結(jié)果婚禮上跨跨,老公的妹妹穿的比我還像新娘潮峦。我一直安慰自己,他們只是感情好勇婴,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布忱嘹。 她就那樣靜靜地躺著,像睡著了一般耕渴。 火紅的嫁衣襯著肌膚如雪拘悦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天橱脸,我揣著相機(jī)與錄音础米,去河邊找鬼。 笑死添诉,一個胖子當(dāng)著我的面吹牛屁桑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栏赴,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蘑斧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了须眷?” 一聲冷哼從身側(cè)響起乌叶,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柒爸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體事扭,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡捎稚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片今野。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡葡公,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出条霜,到底是詐尸還是另有隱情催什,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布宰睡,位于F島的核電站蒲凶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拆内。R本人自食惡果不足惜旋圆,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望麸恍。 院中可真熱鬧灵巧,春花似錦、人聲如沸抹沪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽融欧。三九已至敏弃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹬癌,已是汗流浹背权她。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留逝薪,地道東北人隅要。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像董济,于是被迫代替她去往敵國和親步清。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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