shell指令碼學習-6(sed命令學習)

來源:互聯網
上載者:User

5 sed中有選項嗎?有沒有什麼比較常用的?

sed最主要的就是command部分,把這部分玩轉了,你就已經很厲害了,而玩轉這部分的前提是玩轉Regex。儘管如此,sed的選項部分的-n選項仍然是非常重要,理解了它,對於你提高sed水平也是至關重要。

前面提到,sed會將模式空間裡的行經過處理後輸出到標準輸出,這是預設的處理方式。就是說,除非你使用d命令來刪除此行,否則它無論變成什麼樣子,無論它被替換成什麼形狀,它都會多多少少被輸出到螢幕上。前面的例子可以證明這一切。你不信?給你個最能說明問題的例子:

[rocrocket@rocrocket programming]$ cat roc.txt
1
2
3
4
5
[rocrocket@rocrocket programming]$ sed ‘/4/p’ roc.txt
1
2
3
4
4
5

看,除了所有的原始內容都被輸出來了,而且含有字元4的行被重複輸出了一遍。這就是sed的工作原理,它會不問青紅皂白的先把原始行輸出來,然後再執行後面的動作,在這裡我們設定了p,表示列印此行。這種輸出結果不是我們想要的,我們其實想要的是只輸出含有4的行。

這時,如果你使用了-n選項,你會發現,結果如你所願了:

[rocrocket@rocrocket programming]$ sed -n ‘/4/p’ roc.txt
4

選項-n告訴sed,除非是明確表明要輸出的行,否則不要給我胡亂輸出。(這回你知道-n的厲害了吧^_^)

-n一般會和-p配合使用,意思是說輸出那些發生變化的行。

6 command部分感覺很複雜,能給稍微總結一下麼?

command部分是這樣,可以分為兩部分,一部分是確定範圍部分,一部分是處理方式部分。

確定範圍部分可以分為兩種方式:

1 指定行數:例如3,5表示第3、第4和第5行;5,$表示第5行至最後一行;

2 用模式比對進行指定:例如/^[dD]/表示匹配行首不是以d或D開頭的行等等。

處理方式部分呢,有很多命令可用,介紹幾個最常用的吧:

d:表示刪除行

p:列印該行

r:讀取指定檔案的內容

w:寫入指定檔案

a/:在下面插入新行新內容

7 再舉幾個例子吧,給點經典的sed應用。

例一 顯示test檔案的第10到20行:sed -n ‘10,20p’ test

例二 將所有以d或D開頭的行的所有小寫x變為大寫X:sed ‘/^[dD]/s/x/X/g’ test

例三 刪除每行最後的兩個字元:sed ’s/..$//’ test

(有人會問用sed ‘/..$/d’ test為什麼不行? 這是因為/..$/表示匹配所有末尾含有兩個字元的行,然後刪除這樣的行,顯然這是錯誤的)

例四 刪除每一行的前兩個字元:sed ’s/..//’ test

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.