功能說(shuō)明:利用script來(lái)處理文本文件。
語(yǔ)法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
補(bǔ)充說(shuō)明:sed可依照script的指令,來(lái)處理、編輯文本文件。
參數(shù):
-e<script>或--expression=<script> 以選項(xiàng)中指定的script來(lái)處理輸入的文本文件。
-f<script文件>或--file=<script文件> 以選項(xiàng)中指定的script文件來(lái)處理輸入的文本文件。
-h或--help 顯示幫助。
-n或--quiet或--silent 僅顯示script處理后的結(jié)果。
-V或--version 顯示版本信息。
sed工作原理:sed是一個(gè)非交互式的流編輯器。所謂非交互式,是指使用sed只能在命令行下輸入編輯命令來(lái)編輯文本,然后在屏幕上查看輸出;而所謂流編輯器,是指sed每次只從文件(或輸入)讀入一行,然后對(duì)該行進(jìn)行指定的處理,并將結(jié)果輸出到屏幕(除非取消了屏幕輸出又沒(méi)有顯式地使用打印命令),接著讀入下一行。整個(gè)文件像流水一樣被逐行處理然后逐行輸出。
下面我們看一下sed的工作過(guò)程。 sed不是在原輸入上直接進(jìn)行處理的,而是先將讀入的行放到緩沖區(qū)中,對(duì)緩沖區(qū)里的內(nèi)容進(jìn)行處理,處理完畢后也不會(huì)寫回原文件(除非用shell的輸出重定向來(lái)保存結(jié)果),而是直接輸出到屏幕上。sed運(yùn)行過(guò)程中維護(hù)著兩個(gè)緩沖區(qū),一個(gè)是活動(dòng)的“模式空間(pattern space)”,另一個(gè)是起輔助作用的“暫存緩沖區(qū)(holding space)”。一般情況下,每當(dāng)運(yùn)行sed,sed首先把第一行裝入模式空間,進(jìn)行處理后輸出到屏幕,然后將第二行裝入模式空間替換掉模式空間里原來(lái)的內(nèi)容,然后進(jìn)行處理,以此類推。一般情況下暫存緩沖區(qū)是用不到的,但有特殊的命令可以在模式空間與暫存緩沖區(qū)之間交換數(shù)據(jù),后文將有介紹。由于sed對(duì)文本的所有操作都是在緩沖區(qū)里進(jìn)行的,所以不會(huì)對(duì)原文件造成任何破壞。
sed命令格式
sed的命令格式如下:
sed [-Options] [‘Commands'] filename
其中,Command是一個(gè)sed命令,sed命令一定要被包含在一對(duì)單引號(hào)中,以免被shell解釋,其格式如下:
[address-range][sed-command]或
[Pattern-to-match][sed-command]
address-range是指要處理的行的范圍,又叫地址范圍;pattern-to-match是一個(gè)要匹配的模式,是一個(gè)正則表達(dá)式,sed-command是一個(gè)sed命令,用來(lái)對(duì)指定的行進(jìn)行處理。下面是一個(gè)簡(jiǎn)單的例子:
sed –n ‘1,3p' students
這個(gè)命令將文件students中的第1到3行打印到屏幕。注意,地址范圍和sed命令之間沒(méi)有空格,如果加入空格,sed也會(huì)將其忽略。參數(shù)-n用來(lái)取消默認(rèn)輸出。默認(rèn)情況下,sed每讀入一行到模式空間,無(wú)論是否對(duì)其進(jìn)行處理,在讀入下一行之前多要將模式空間中的內(nèi)容輸出到屏幕上。參數(shù)-n可以用來(lái)取消這種默認(rèn)的輸出,只有當(dāng)用戶用命令p時(shí)才將指定的行輸出到屏幕。如果沒(méi)有用參數(shù)-n而又對(duì)指定行執(zhí)行了p命令,那么這些行將會(huì)被打印兩次。
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注