UNIX 文字工具: 閱讀工具

先用以下指令製造一個 40 列的文字檔 forty.txt 出來:

cp twenty.txt forty.txt
cat -n twenty.txt >> forty.txt
此時,如果將 forty.txt 印在螢幕上,則不能看到整個文件內容, 這是因為終端機的螢幕通常只有 25 列 (通常有 80 格)。 因此,如果一個文件超過了 24 列,就看不到全部。 這時候我們需要一個純文字文件的閱讀工具。

UNIX 的標準閱讀工具是 more。一般用法是

more FILE
請用 forty.txt 來練習。

以下,當我們說 一頁 的時候,指的是一個螢幕的列數, 或是一個螢幕的列數減一。 當我們說 半頁 的時候,指的是大約半個螢幕的列數, 通常是 11 或 12 列的意思。 實際情況請做實驗來確定。

more 只有很少量的指令,以下是大部分的指令了:
q 結束 more 程式
[Space_Bar] (空間棒) 向下一頁
[Enter] 向下一列
d 向下半頁
b 向上一頁
= 顯示目前螢幕上最後一列的列號
:f 顯示目前的檔案名以及列號
/STRING 其中 STRING 是一個想要搜尋的字串,more 從目前這個螢幕的第一列開始向下搜尋, 螢幕向下移動,使得第一個出現字串的那一列,大約出現在螢幕的前三列
n 繼續向下搜尋剛才指定的那個字串
. 重複上一個指令
Ctrl+L 重印此頁的內容;例如恰好有人 write 訊息給您而擾亂螢幕之後, 就可以使用這個指令
v 用 vi 編輯器打開目前的檔案;如果還沒學 vi 千萬別做
以上最需瞭解的,大概就是搜尋指令了。我們只簡單地舉出三點:

more 也可以一次打開許多檔案,但是螢幕上一次只能看到一個檔案。 譬如說

more *.txt
會打開目前資料夾中的所有 .txt 檔案。其閱讀順序就和 ls *.txt 列出來的檔案順序一樣。 在此情況下,多了以下幾個可用的指令
:n 打開下一個檔案
:p 打開上一個檔案

讀者應該已經發現,more 無法提供幾個極為常見的需求,例如向上一頁、 到文件的第一列、到文件的最後一列等等。 因此有人寫了 less 來取代 more。less 的功能其實比 more 多。 雖然 less 不是 UNIX 的標準閱讀工具,但是許多系統都會安裝 less 程式。 所有 more 能用的指令,在 less 裡面都有。 以下只舉出幾個常用的,還有其表現方式與 more 不同的:
j 向下一列
k 向上一列
u 向上半頁
= 顯示目前螢幕上第一列的列號
g 到文件的第一列
G 到文件的最後一列
Ng 到文件的第 N 列,其中 N 是一個正整數
/STRING 向下搜尋字串,找到的字串一定放在螢幕的第一列
?STRING 向上搜尋字串,找到的字串一定放在螢幕的第一列
n 按照前面指定的搜尋方向,找下一個出現的字串
N 相反於前面指定的搜尋方向,找下一個出現的字串
h 看線上協助訊息 (help message)

more 和 less 都可以從 stdin 輸入文件。 請試驗

more < forty.txt
或是
less < forty.txt
但是,如果文件是從 stdin 進來的,則有少部分的指令不能使用。 例如 more 和 less 就不知道檔案名。其他的留待讀者日後再一一發現。

如果在課堂中由教師帶領練習,請要求學生用 less 展現其 forty.txt 檔案, 巡堂確認無誤。底下的教材不必教給初學者。

有幾個和 more 或 less 有關的系統參數,列於下。 這些都不是初學者應該理會的部分,但是在以後或許有用。
參數名 參數值 說明
EDITOR 任一個編輯器的檔案名,內定是 vi 按 v 指令時所開啟的編輯器
PAGER 任一個閱讀工具的檔案名,通常是 more 或 less 當 UNIX 系統需要閱讀工具的時候,自動選擇的閱讀工具
LESS 中大數學的設定是 -fCe 每當執行 less 的時候,自動添加的指令參數。 f 的意思是不要抱怨檔案可能是非文字檔,有時候 less 會認為 Big-5 中文檔案是非文字檔。 C 的意思是先 clear 螢幕再開始 less 指令,比較好看。 e 的意思是當到達了文件的底部,如果還要在向下的話,就自動離開 less。
LESSCHARSET latin1 利用 latin1 字碼來欺騙 less 接受 Big-5 字碼的中文文件。

習題

  1. 假設終端機的螢幕可以顯示 25 列文字, 為什麼一份 25 列的文件卻無法印在一個螢幕之內?

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Nov 19, 2000
Last Revised: Nov 19, 2000
© Copyright 2000 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw