13.11. 更多用來讀取文字檔的指令

我們已經介紹許多基本的 shell 提示符號的指令以用在文字編輯器中讀取檔案。 這裡還有一些。

13.11.1. head 指令

您可以使用 head 指令來看一個檔案的起始幾行。 這個指令是:

head <filename>

head 可以是一個好用的指令,但因為它僅限制在一開始的那幾行,您不曉得該檔案到底有多長。 預設情況下,您只可以讀取檔案中的前十行。 您可以藉由指定一個數字選項來更改要顯示的行數,如下列的指令所示:

head -20 <filename>

13.11.2. tail 指令

head 的相反就是 tail。 使用 tail,您可以檢視一個檔案的倒數十行。 當您在檢視紀錄檔中最後十行的重要訊息時,這個指令將對您很有幫助,您也可以使用 tail 來監視不斷更新的紀錄檔訊息。 藉由使用 -f 的選項,tail 將會在畫面上自動即時的列出新的紀錄檔訊息。 舉例來說,如想要即時的檢視 /var/log/messages 紀錄檔的內容,請以 root 身份在 shell 提示符號下輸入:

tail -f /var/log/messages

13.11.3. grep 指令

grep 指令對於搜尋檔案中的特定字串很有用。 例如,假如您想找出 sneakers.txt 檔案中含有 "coffee" 這個字的地方,您可以輸入:

grep coffee sneakers.txt

您將可以看到在這個檔案中有找到 "coffee" 這個字的每一行。

提示建議
 

除非有另外指定,grep 的搜尋是 有分辨大小寫的。 這表示搜尋 Coffeecoffee 是不同的。 所以在 grep 參數中的 -i,它可以讓您的搜尋不分辨大小寫。 請閱讀 grep 的 man page 來認識更多關於這個指令的資訊。

13.11.4. I/O 重導向與 Pipes

當您想要儲存或者要列印之後要閱讀的資訊,您可以使用 pipes 與輸出重導。

例如,您可以使用 grep 指令來搜尋檔案中的特定內容,然後再將結果儲存到一個檔案或傳送到印表機。

如要列印在 sneakers.txt 檔案中關於 "coffee" 這個字的索引,只要輸入:

grep coffee sneakers.txt | lpr

13.11.5. 萬用字元與正規表示式

萬一您忘記要尋找的檔案名稱時該如何? 藉由使用萬用字元或正規表示式您可以不用知道完整的檔案名稱就可以執行工作。 只要填入您知道的部份,然後再以一個萬用字元來取代其餘的部份。 萬用字元是特殊的符號,您可以用來取代字母、數字與符號,使得在搜尋特定的目錄與檔案時更加容易,而不用仔細檢查整個目錄的列出以找出您的搜尋的東西。

提示建議
 

要閱讀更多關於萬用字元與正規表示式的資訊,您可以看一下 bash 的 man page (man bash)。 記得您可以輸入 man bash | col -b > bash.txt 來儲存這個檔案到一個文字檔。 然後,您可以使用 less or vi(vi bash.txt) 來開啟並讀取這個檔案。 假如您想要列印這個檔案,請注意這個檔案蠻長的。

我們知道這個檔案稱為 "sneak____.txt",所以輸入:

ls sneak*.txt

然後就會輸出這個檔案的名稱:

sneakers.txt

您或許在搜尋時最常使用星號 (*)。 星號將會找出所有符合您要找的樣式。 所以即使輸入:

ls *.txt

或:

ls sn*

您可以找出 sneakers.txt 以及其他任何以 sn 為開頭或以 .txt 結尾的檔案。 它幫您盡量縮小搜尋的範圍。

另一個縮小搜尋範圍的方式是使用問號的符號 (?)。 就像星號一樣,使用 ? 可以幫您找出符合搜尋樣式的檔案。

在這個例子,? 可用來核對一個單一的字元, 所以假如您要搜尋 sneaker?.txt,您會得到 sneakers.txt 的結果,或者是 sneakerz.txt,如果有這個檔案的話。

正規表示式比起簡單的星號或問號要複雜許多。

例如,當一個星號剛好是檔名的一部分,假如檔案 sneakers.txt 稱為 sneak*.txt,這個時候正規表示式就顯得很有用了。

使用反斜線 (\),您可以指定不想使用星號來搜尋 所有檔案,不過您是要搜尋含有星號的檔名。

假如這個檔案名稱為 sneak*.txt,請輸入:

sneak\*.txt

這裡有關於萬用字元與正規表示式的簡要清單: