隔日自然醒來,打開電腦,先來上一段 Queen 的 We are the champions 加上一杯咖啡。突然想起凌晨未完成的觀察,馬上用 vi 再查看 access_log。乖乖!不是一個,前後共三位青年才俊上網。此時在 vi 模式下,我想分別將三位的資料從 access_log 檔案中分離出來,建立三個個別檔案。這種想法,以前不曾想過!一時卡住了,不知道該怎麼做?拿起筆來,在紙上寫下了"如何"挪移"這幾個字。喝完我的咖啡後,趴在桌上小咪一下..才一下,就被周公槌醒,我看著"挪移"兩字,方法找到了。
# vi access_log
我使用 vi 指令進入了要編輯的 access_log 檔案中。因為沒有加上任何特殊選項,所以游標會在第一行的位置。接著,我打算將有為青年一號,位址是 202.102.141.56,所遺留的拜訪紀錄全部挪移到檔案的最末端。指令如下:
:g/202.102.141.56/mo$
該行指令其中 g 代表 global,是整個檔案的意思。在 :g/ 後面的是要搜尋的字串,我代入的是 202.102.141.56,也就是有為青年一號。最後 mo$ 其實是 ex 編輯器的指令,mo 是 move 搬移;$ 則代表最後一行的意思。所以這行指令做的就是,將檔案從上到下檢查內含有 202.102.141.56 的每一行,找到了就將該行搬移到檔案的最後一行。執行完畢後,游標會停留在最後一行。
傳統的 vi 指令,不支援多重視窗編輯。所以無法用一隻 vi 程式同時開啟兩個檔案做資料交換、轉移的編輯。但這點並沒有太大的不便,因為替代的方法也很簡單。只要善用 vi 程式的具名緩衝區,先將 A 檔案的資料暫存起來,然後繼續編輯 B 檔案,再呼叫出來即可。
對 vi 程式的運作而言,使用 d (delete) 與 y (yank) 都會將資料放入具名的 buffer 中。但對本文的需求來說,我自己絕對不會選擇 delete 來做,雖然做得到,但太危險。所以唯一且正確的選擇是使用 yank。她支援小寫字母 a ~ z 命名的具名緩衝區供使用者運作。現在仔細想想,似乎我從不曾嫌過 26 個不夠用?但她畢竟是一個相當有限的限制。
接下來是我實際運作的例子。每天系統的 message 檔案,總會有一些異常的信息。這些訊息雖多半具有規律性,但仍然會有無法掌握的情況出現。由於我的系統服務非常單純,所以我習慣使用 vi 查看每天發生的事情。檢視的過程中如果有異樣或自己搞不清楚的警訊,我就先將她存入具名緩衝區中,等到全部檢視完畢後,再決定如何處理。