13.9. 使用 cat 來操縱檔案

Red Hat Linux 有一種工具程式,它可以幫您保留短的清單,再將那些清單收集起來,並且向您顯示關於您系統的資訊。

這個工具程式稱為 cat,就是 concatenate 的簡稱,它意指將檔案串在一起。

cat 指令也會將整個檔案的內容顯示在螢幕上(例如,輸入 cat filename.txt)。 假如這個檔案相當長,它將很快的在畫面上捲過。 要避免這樣的情況,您可以使用 cat filename.txt | less 指令。

使用管線 (|) 加上 less 指令,將會一次只顯示一頁。 您可以使用上下方向鍵來前後移動這個頁面。 如需關於使用管線來結合不同功能得更多資訊,請看 菴 13.10 節

13.9.1. 使用重導向(Redirection)

『重導向』就是使 shell 去改變它認為是標準的輸入或標準的輸出該往何處去。

要重導標準的輸出,必須使用 > 的符號。 需放置 > 在 cat 指令之後 (或者在任何寫入標準輸出的工具或應用程式之後),它將引導輸出到這個符號後面所接的檔名。

例如,如果只是使用 cat 指令,將只會在螢幕輸出您所輸入的東西,就好像重複您所輸入的行。 下列的例子顯示出 cat 正在重複所輸入的每一行:

圖形 13-5. cat 指令

如要重導向 cat 的輸出到一個檔案,請在 shell 提示符號下輸入以下指令(按下 [Enter] 鍵將會帶您到下一行):

cat > sneakers.txt

圖形 13-6. 重導輸出到一個檔案

按下 [Enter] 帶您到下一行,然後使用 [Ctrl]-[D] 鍵來離開 cat

圖形 13-6 您有沒有發現什麼不同的地方? 是不是沒有重複的紀錄了。 這是因為 cat 的標準輸出已經被重新導向了。 它的輸出被重新導向到一個您所建立的檔案稱為 sneakers.txt

當您執行 cat 後,您可以在您所在的目錄中找到這個檔案 (假如您想將它列出的話,可以輸入 ls 指令)。

就您先前所學的,您可以使用 cat 來讀取這個檔案。 請在提示符號下輸入:

cat sneakers.txt

注意警告
 

當您重導輸出到一個檔案時,請特別小心,因為您可以很輕易地覆寫一個已有的檔案! 請確定您要建立的檔名沒有與先前已有的檔案名稱相同,除非您想要取代它。

再使用輸出的重導向到另一個檔案,並稱它為 home.txt。 就這個例子,請輸入指令 cat > home.txt 然後再按下 [Enter]

bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!

現在,在新的一行使用 [Ctrl]-[D] 的按鍵組合來離開 cat

再來,使用 cat 來結合 home.txtsneakers.txt, 並且重導兩個檔案的輸出到一個全新的檔案稱為 saturday.txt (您可以在 圖形 13-7 找到一個例子)。 請輸入以下指令:

cat sneakers.txt home.txt > saturday.txt

圖形 13-7. 結合檔案並重導輸出

您可以發現 cat 已經新增 home.txtsneakers.txt 檔案結尾的地方。

13.9.2. 增添標準的輸出

您可以使用輸出重導向來增加新的資訊到一個既存檔案的結尾處。 類似當您使用 > 符號,您告訴您的 shell 傳送資訊到非標準輸出的某處。

然而,當您使用 >>,您是在 "增加" 資訊到一個檔案,而不是取代整個檔案的內容。

最佳的解釋就是做個示範。 使用兩個已經建立好的檔案 (sneakers.txthome.txt),然後使用增添輸出的符號來將它們結合。 您想要增加在 home.txt 的資訊到已經存在 sneakers.txt 的資訊,所以請輸入:

cat home.txt >> sneakers.txt

再來使用 cat sneakers.txt 指令來檢查這個檔案。 最後的輸出顯示 home.txt 的內容出現在這個檔案的尾端:

buy some sneakers
then go to the coffee shop
then buy some coffee
bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!

您所輸入的指令告訴系統從 home.txt 檔案新增輸出到 sneakers.txt 檔案。

藉由增添輸出,由於使用既存的檔案而不是建立一個新的檔案,將替自己節省許多時間(以及減少些許磁碟混亂)。

現在請比較 sneakers.txtsaturday.txt 檔案的內容,您將會發現它們兩個是一樣的。 如要做比較的話,請輸入:

cat sneakers.txt; cat saturday.txt

兩個檔案的內容將會顯示出來 — 先是 sneakers.txt,再來為 saturday.txt (如 圖形 13-8 所示)。

圖形 13-8. 字串的指令與比較檔案

13.9.3. 重導標準輸入

您不只可以重導標準輸出,您也可以執行相同的重導向在標準的輸入上。

當您使用重導標準輸入符號 < 時,您在告訴 shell 您要一個檔案被指令讀取為輸入。

使用一個您已經建立好的檔案來示範這個例子。 只要輸入:

cat < sneakers.txt

因為您使用小於的符號 (<) 來將 cat 指令與檔案 分開,sneakers.txt 檔案的輸出以被 cat 所讀取。

圖形 13-9. 重導標準輸入