揭開sed命令的面紗 你還能做更多
表面上看,Unix流編輯器(sed)可能看上去只是一個溫和的文本編輯器。但是在它平靜的外表之下有著強大的功能,可以作為高級功能來幫助管理你的數(shù)據(jù)中心資源,而你只用敲擊幾個鍵。這篇文章就將為你揭開sed中某些強大功能的神秘面紗。
sed案例
為什么是sed呢?像vi一樣的普通編輯器也可以修改文本文件。不同在于sed同時處理多個文件時更高效。用其它編輯器以同一途徑過濾文本的能力是個未知數(shù)。sed的默認行為是逐行地初查輸入文件,將命令應(yīng)用到這些行上并將結(jié)果寫入標準輸出。為了執(zhí)行這些命令,sed使用正則表達式。下面讓我們來看看Listing 1中你能看到的應(yīng)用到文件Users的例子:
my-computer:~> cat users
lori:x:1006:100::/home/lori:/bin/bash
linda:x:1007:100::/home/linda:/bin/bash
lydia:x:1008:100::/home/lydia:/bin/bash
lisa:x:1009:100::/home/lisa:/bin/bash
leonora:x:1010:100:/home/leonora:/bin/bash
Listing 1
為了啟動,你可以只顯示示例文件中的幾行,下面的命令顯示頭兩行省下了后面的:
sed 2q users
更實用的是下面的命令,它列出了包括or字符串在內(nèi)的所有行:
sed -n /or/p users
在這個例子中,-n是or搜索字符串后的強制選項。在這個字符串后面,p命令列出結(jié)果。在這個例子中,你已經(jīng)查詢了or字符串。sed使用正則表達式,這個強大的搜索模式可以在Linux和Unix環(huán)境中使用,它能讓你的搜索更靈活。下面是使用正則表達式的一些例子:
sed -n /^or/p users:顯示不包括文本or的所有行。
sed -n /./p users: 顯示至少包括一個字符的所有行。
sed -n /\./p users:顯示有.的所有行。
僅僅列出行并不是讓sed如此強大的地方,你還可以替換字符。下面的命令概括了該語法:
sed s/leo/lea/g users
該命令用字符串lea替換了leo,并將結(jié)果寫入標準輸出。將它寫入標準輸出非常安全,但是它不會將任何變更應(yīng)用到文件。要做變更,在命令中添加-i選項。
sed -i s/leo/lea/g users
這些變更即刻應(yīng)用,如果你明白自己在做什么,這是很有用的。如果你對sed仍然動搖,先將結(jié)果發(fā)送到標準輸出,因此你就可以在編寫它之前檢查了。
你可以通過sed的shell腳本功能發(fā)揮它的全部力量。例如,如果你有四個文件,在現(xiàn)有的目錄中命名為file1、file2、file3和file4,而你需要將每個文件中的文本one替換為文本ONE。以下的腳本行將執(zhí)行這個任務(wù):
for i in file[1-4]; do sed -i s/one/ONE/g $i; done
想像一下數(shù)據(jù)中心中sed的力量:例如,你可以變更包含剛剛替換的存儲設(shè)備ID的所有配置文件,或者你可以修改一個模板文件來確保__服務(wù)的名字替換成了你正使用服務(wù)的真實名稱。sed的可能性是無限的。
【編輯推薦】