使用 sed 操作 /etc/passwd,最好復制一份 (cp /etc/passwd /tmp),操作 tmp 下的 passwd(其實不用,因為在一般情況下 sed 只是修改了輸出結果,不會改變文件本身,除非要求這么做)。
/etc/passwd 的內(nèi)容列出并且列印行號,同時刪除 2~5 行。cat /etc/passwd | sed '2,5d'sed 的動作是'2,5d'(動作需要放在單引號之間)。nl 命令在 linux 系統(tǒng)中用來計算文件中行號。nl 可以將輸出的文件內(nèi)容自動的加上行號!其默認的結果與 cat -n 有點不太一樣,nl 可以將行號做比較多的顯示設計,包括位數(shù)與是否自動補齊 0 等等的功能。
只刪除第二行
nl /etc/passwd | sed '2d'
刪除第 3 行到最后一行
cat -n /etc/passwd | sed '3,$d'
在第二行后 (就是在第三行) 加上"i am fine" 字樣
cat -n /etc/passwd | sed '2a i am fine'
如果要在第二行前面
nl /etc/passwd | sed '2i i am fine'
如果是要增加兩行以上,在第二行后面加入兩行字,例如[hello]與[how are you]
nl /etc/passwd | sed '2a hello\
\>how are you’
每一行之間都必須要以反斜杠 () 來進行新行的添加,所以上面的例子,我們可以發(fā)現(xiàn)在第一行的最后面就有 \ 存在。(再輸入的是會需要注意,單引號不要一起輸完)。
以行為單位的替換與現(xiàn)實
將第 2-5 行的內(nèi)容替換成"hahaha" nl /etc/passwd | sed '2,5c hahaha',通過這個方法,我們就可以替換整行數(shù)據(jù)了。
僅列出 /etc/passwd 文件的 5-7 行 cat -n /etc/passwd | sed -n '5,7p',可以透過這個 sed 的以行為單位的顯示功能, 就能夠?qū)⒛骋粋€文件內(nèi)的某些行號選擇出來顯示。
搜索 /etc/passwd 中有關 /root 關鍵字的行
nl /etc/passwd | sed '/root/p'
思考: 為什么會輸出所有行的情況?
使用 -n 的時候?qū)⒅淮蛴“0宓男小?/p>
nl /etc/passwd | sed -n '/root/p'
刪除 /etc/passwd 所有包含 root 的行,其他行輸出
nl /etc/passwd | sed '/root/d'
搜索 /etc/passwd,找到 root 對應的行,執(zhí)行后面花括號中的一組命令,每個命令之間用分號分隔,這里把 bash 替換為 blueshell,再輸出這行:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
如果只替換 /etc/passwd 的第一個 bash 關鍵字為 blueshell,就退出
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 1
最后的 q 是退出。
除了整行的處理模式之外,sed 還可以用行為單位進行部分數(shù)據(jù)的搜尋并替換。 基本上 sed 的搜尋與替換與 vi 相當?shù)念愃啤?sed 's/ 要被取代的字符串 / 新的字符串 /g'
先通過 /sbin/ifconfig eth0 查看本機的 IP 地址,我的是 (192.168.199.5)
將 IP 前面部分予以刪除
/sbin/ifconfig eth0 | grep 'inet addr'|sed 's/^.*addr://g'
將 IP 后面部分予以刪除
/sbin/ifconfig eth0 | grep 'inet addr'|sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
即可得到 IP
一條 sed 命令,刪除 /etc/passwd 第三行到末尾的數(shù)據(jù),并把 bash 替換成 hahaha。
nl /etc/passwd | sed -e '3,$d' -e 's/bash/hahaha/g'
注意: 每天命令前面都加入了 -e 選項
最好別使用,如果使用需要加入一個 -i 選項
例如在最后一行插入 hahaha,nl /etc/passwd | sed -i '$i hahaha'