highlight.js

星期日, 3月 08, 2015

從顯示 Big5 編碼文檔看 Linux/Unix 指令美感

我自己是 Linux/Unix 白癡, 以前裝 Linux 都是假設要取代 Windows 為前提, 所以都是在挑哪一種圖形桌面好看、好用, 總是對指令介面故意閃避, 除非逼不得以, 否則就是滑鼠滑來滑去。前幾個禮拜開始上 edx 中由 Linux Foundation 開的線上課程, 課程一開始也是偽裝成使用圖形界面, 不過一兩堂課後就完全是指令介面了, 也因此深深體驗到 Linux/Unix 的美。

在使用 cat 這個簡單的指令顯示檔案內容時, 就遭遇一個很基本的問題, 當我的檔案是 Big5 編碼時, cat輸出的結果就是一團亂碼, 因為它是以系統預設的 UTF-8 來解譯檔案內容。於是我就想那麼 cat 會不會有個選項是可以指定輸入資料的文字編碼呢?找了半天發現不只 cat沒有, less、grep 等所有會處理文字的指令也都沒有。好不容易上網找了資料後, 在這一篇找到了原來有個指令 iconv 可以轉換文字編碼。

到這裡就出現了 Linux/Unix 在指令設計上的美感, 由於有 pipe 資料管道的架構, 因此每個指令都專注在自己專門的工作, 如果需要用到指令本身所不具備的功能, 就依靠 pipe 傳送給具備該功能的指令來幫忙。例如若是想用 cat 顯示 Big5 編碼的文字檔, 就可以請 iconv 幫幫忙:

$cat big5_file.txt | iconv -f big5

這樣一來, 需要處理文字的指令都不需要自己加上處理文字編碼的功能, 就可以具備處理不同編碼文字檔案的能力。例如若要使用 less 檢視檔案內容, 可以將上述指令的輸出再傳送給 less 指令:

$cat big5_file.txt | iconv -f big5 | less

或是如果想用 grep 搜尋也沒有問題:

$cat big5_file.txt | iconv -f big5 | grep 我想找的字樣

要深刻的瞭解這一點, 才能將 Linux/Unix 指令用得開心, 而且用得有效率。