专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>shell编辑器>

Vi- Ed 和ed script

百度收藏 QQ搜藏
現在終於可以正式說明 ed 了。其實和 ed 相似的還有 ex,雖然有點不同,但是使用上應該是不會有太大差別。 Ed 和 ex 的指令和 vi 的 line mode 的指令大部分是相同的,可能有些指令無法在 ed 上運作,但是肯定可以在 ex 上運作。下面的說明只有一些以前在 line mode 和全域代換時沒介紹的指令,當然我只挑我認為有必要知道的介紹。至少會讓你可以光靠 ed 就能夠編輯一份文件,世事難料,說不定你會有倒楣到只能用 ed 的時候。

在 shell 環境下指令 ed filefile 是檔名。這時候會進入 ed 工作環境,ed 會等著你輸入命令。因為是列編輯器,所以你必須用指令 p 要求 ed 印出檔案內容。例如指令 2p 會印出第二列,1,5p 會印出前面五列。

要加入一個新列,用指令 a。例如 5a 會在第五列的下面列,如果要再第一列前面加上一列,按 0a。然後你可以輸入文字,每次你按下【 Enter 】會多出一個新列。要離開時,在一列的開頭輸入句點【 . 】;句點本身不會存入檔案。

Ed 無法讓你修改一列的部分文字,所以你只能用代換指令慢慢代換。但是你可以修改整列的文字,指令是 c。例如 1c 會刪除第一列,然後開一個新列,要離開的話一樣在一列的開頭輸入句點【 . 】。

如果要把數列合成一列,可以用指令 j1,5j 會把一到五列合成一列。一般而言只會合成兩列,當你直接用 j 時,ed 會把目前這一列和下一列合成一列。「目前這一列」是你目前移動到的位置,你可以輸入數字來指定,但是這在每次執行指令後都會改變,所以最好還是在指令前面加上明確的數字。

要離開 ed,指令是 q。當你修改過檔案而尚未存檔時要離開要下指令 Q。如果要存檔的話,可以下指令 w。要把更改後的文件另存新檔到 file 中,指令是 w file

 

Ed script

當你要對很多個檔案做相同的編輯動作時,或許你可以試著用 ed script。你把你要做的編輯指令放在一個檔案中,每個指令用換列字元隔開,最後一個指令要是 w(write),否則就不會存檔。例如檔案 do 的內容是這樣的:
1,$s/pig/dog/g
1,$s/windows/unix/g
13,25m30
g/bgs/d
w
這時你在 shell 下指令 ed - file < do, ed 會對 file 執行 script 中所列的動作,然後存檔離開。指令中的 - 會抑止終端機訊息﹝不寫也沒關係﹞。這部分請讀者要自行練習,光看這樣的說明恐怕不容易理解。

最後我要說一個 shell script。讀者只要記得怎麼用就好,不知道其中的道理也沒關係。編輯一個新檔案,就命名為 test。內容如下:

for file in $*
do
     ed - $file < script
done
script 由你自己指定,我還是用 do。編輯以後,下指令 chmod u+x test 把 test 改成可執行檔。假設你有這些檔案:
rr01 rr02 rr03 rr04 rr05 rr06
你希望這些檔案都會被 do 處理,者時候你可以這樣下指令 test rr??。然後上述的檔案就會送入 test 中,執行 ed - file < dofile 是送入的檔案。

介紹到這裡,我想應該是夠了。 Ed﹝或 ex﹞雖然不比 vi 好用,但是可以寫成 script。而且說不定你真的會發生不得不用 ed 的情況,學起來總是有好處的。至於最後面的 shell script 和本節關係不大,只不過看起來很方便,所以我就提了一下。如果讀者真的感興趣,請自行找尋資料,我這邊就不多說了。

上一篇:Vi- Sed 编辑器 下一篇:文件编辑器 vi 介绍(LinuxSir)

power by soyo123 2007-2008