反白練習
請將 drgeo.txt 這個文字檔取回您的 Linux
機器, 並用 less drgeo.txt
打開檢視。 (這個文字檔是從
Dr. Geo II
的網站下載一個壓縮檔, 然後用 unzip -v drgeo-oneclick-*.zip
> drgeo.txt
所產生的。 又略加編輯, 縮短路徑名稱。) 關於
less 指令, 請參考 less
的基本操作。
先按 / 表示搜尋, 次輸入 regexp: [0-9]+% 表示要搜尋 「一串數字之後跟著百分比符號」, 最後按 Enter, 出現如上圖反白。 在 less 裡面, 沒有 \d 簡寫可用, 必須寫 [0-9] 表達 「一個數字」。
如何令第一個欄位 "Length" 底下的數字都反白呢? 先試試看: [0-9]+ 結果所有的數字都反白了。 改用 ^\s*[0-9]+ 就抓出位於列首, 空白之後的一串數字。 如果資料檔當中, 每一列上可能有數個欄位都符合想抓的 regexp, 我們就將 regexp 再寫長一點, 用前後延申的字串將真正有興趣的部分與其他相似字串區隔開來。 例如這裡, 「位於開頭」 就是足以將 Length 欄位特別挑出的特性。 至於多抓到的部分 (例如這裡的 「空白」), 不必擔心, 後面會學到: 用小括弧可把真正有興趣的部分精確取出。
往下看之前, 請先自己試試看:
- 能否令第二個欄位反白? 第四個呢? 第五個呢? ... 第三欄比較沒有特色, 可以和第四欄一起抓; 倒數第二欄 CRC-32 也比較難單獨抓, 可以和最後一欄一起抓。
- 如何抓出所有的副檔名? (.ini .sh .exe ...)
- 如何抓出所有的目錄名稱? (dg/ c/ res/ MacOS/ Linux686/ ...)
有時候用簡單的 regexp 可以抓出九成九我們需要的資料, 但會遺漏幾筆或多抓到幾筆不需要的資料。 目前我們先不擔心這些狀況。 事實上許多時候若能用 regexp 處理九成九的資料, 剩下的用手工或再一次的 regexp 另外處理, 也已經夠方便了。
- Stored|Defl:N 抓第二欄 "Method"。 這裡的 | 表示 「這一串或那一串」。 注意: 跟 [13579] 「這一個字元或那一個字元」 不太一樣。
- [0-9]+\s+[0-9]+% 同時抓第三欄 "Size" 及第四欄 "Ratio" 。 後續可用小括弧將兩者分別抓出。 後詳。
- [0-9][0-9]-[0-9][0-9]-[0-9][0-9] 抓出第五欄 "Date"。
- [0-9][0-9]:[0-9][0-9] 抓出第六欄 "Time"。
- 「 [0-9a-f]{8} 」 抓出第七欄 "CRC-32"。 注意: 首尾各多放一個空格; 或者放 \b 也可以, 以免抓到 9 位或 9 位以上的十六進位數字。 這裡的 {8} 表示 「前面的東西重複出現 8 次」。 不小心多抓到 「整個壓縮檔的大小 11474421」。
- \S+$ 抓出第八欄 "Name"。 這裡的 \S 表示 「任何一個非空白字元」。 "My Squeak/" 抓得不正確, 因為檔名裡面有空格。
- \.\w+$ 抓出副檔名。
- \w+\/$ 抓出目錄名稱。 "My Squeak/" 還是抓得不太正確。
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/re/hilight.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。