将 /etc/passwd 的内容列出并且列印行号,同時,請将第 2~5 行删除!
sed 的動作為 '2,5d' ,那個 d 就是删除!因為 2-5 行給他删除了,是以顯示的資料就沒有 2-5 行羅~ 另外,注意一下,原本應該是要下達 sed -e 才對,沒有 -e 也行啦!同時也要注意的是, sed 後面接的動作,請務必以 '' 兩個單引号包覆喔!
隻要删除第 2 行
要删除第 3 到最後一行
在第二行後(亦即是加在第三行)加上『drink tea?』字樣!
那如果是要在第二行前
如果是要增加兩行以上,在第二行後面加入兩行字,例如『Drink tea or .....』與『drink beer?』
每一行之間都必須要以反斜杠『 \ 』來進行新行的添加喔!是以,上面的例子中,我們可以發現在第一行的最後面就有 \ 存在。
将第2-5行的内容取代成為『No 2-5 number』呢?
透過這個方法我們就能夠将資料整行取代了!
僅列出 /etc/passwd 檔案内的第 5-7 行
可以透過這個 sed 的以行為機關的顯示功能, 就能夠将某一個檔案内的某些行号選擇出來顯示。
搜尋 /etc/passwd有root關鍵字的行
如果root找到,除了輸出所有行,還會輸出比對行。
使用-n的時候将隻列印包含模闆的行。
删除/etc/passwd所有包含root的行,其他行輸出
找到比對模式eastern的行後,
搜尋/etc/passwd,找到root對應的行,執行後面花括号中的一組指令,每個指令之間用分号分隔,這裡把bash替換為blueshell,再輸出這行:
如果隻替換/etc/passwd的第一個bash關鍵字為blueshell,就退出
最後的q是退出。
除了整行的處理模式之外, sed 還可以用行為機關進行部分資料的搜尋并取代。基本上 sed 的搜尋與替代的與 vi 相當的類似!他有點像這樣:
先觀察原始資訊,利用 /sbin/ifconfig 查詢 IP
本機的ip是192.168.1.100。
将 IP 前面的部分予以删除
接下來則是删除後續的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
将 IP 後面的部分予以删除
一條sed指令,删除/etc/passwd第三行到末尾的資料,并把bash替換為blueshell
-e表示多點編輯,第一個編輯指令删除/etc/passwd第三行到末尾的資料,第二條指令搜尋bash替換為blueshell。
sed 可以直接修改檔案的内容,不必使用管道指令或資料流重導向! 不過,由於這個動作會直接修改到原始的檔案,是以請你千萬不要随便拿系統配置來測試! 我們還是使用下載下傳的 regular_express.txt 檔案來測試看看吧!
利用 sed 将 regular_express.txt 内每一行結尾若為 . 則換成 !
利用 sed 直接在 regular_express.txt 最後一行加入『# This is a test』
由於 $ 代表的是最後一行,而 a 的動作是新增,是以該檔案最後新增『# This is a test』!
sed 的『 -i 』選項可以直接修改檔案内容,這功能非常有幫助!舉例來說,如果你有一個 100 萬行的檔案,你要在第 100 行加某些文字,此時使用 vim 可能會瘋掉!因為檔案太大了!那怎辦?就利用 sed 啊!透過 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修訂!
本文轉自 sjfbjs 51CTO部落格,原文連結:http://blog.51cto.com/11886896/1833220