Jacek 在本技巧文章中介紹了 head 和 tail 命令,它們對於以塊方式處理靜態和動態文件中的數據非常有用。 假定您想只處理文件的一部分,譬如頭幾行或後幾行,那您該怎麼做呢?請使用 head(它將頭 10 行發送至標准輸出)或 tail(它將後 10 行發送至標准輸出)。 您可以通過使用 -n 選項改變這些命令發送至其標准輸出的行數(當然,輸出結果將隨 XF86Config 文件的內容而不同): 清單 1. 將 XF86Config 中選定行數的內容發送至標准輸出$ head -n 4 /etc/X11/XF86Config # File generated by anaconda. # ********************************************************************** # Refer to the XF86Config(4/5) man page for details about the format of # this file. $ tail -n 4 /etc/X11/XF86Config Modes "1600x1200" ViewPort 0 0 EndSubsection EndSection 如果您想讓 head 或 tail 以字節而不是以行為單位,那該怎麼辦呢?您可以用 -c 選項代替 -n 選項。因此,要顯示前 200 個字符,請使用 head -c 200 file,或者使用 tail -c 200 file 來顯示後 200 個字符。如果數字後面跟有 b(表示塊(block)),那麼這個數字將被乘以 512。類似地,跟有 k(表示千字節(kilobyte))表示用 1024 去乘給定的數字,而跟有 m(表示兆字節(megabyte))表示用 1048576 字節去乘給定的數字。 請記住,head file1 file2 file3 和 cat file1 file2 file3 head 之間有重大差別。前者將打印每個文件指定行數的內容,不同文件的內容之間用頭信息隔開,頭信息以 ==> 後跟文件名開頭。後者將打印由 cat 命令後所列文件組成的輸入流中指定行數的內容,但將把輸入流作為單個文件對待。可以使用 -q(表示靜默(quiet))選項關閉文件名頭信息。與 -q 相反的是 -v(表示詳列(verbose))。 假如您要處理的文件在處理期間一直在發生變化(比如,當您讓 head 或 tail 讀取來自正在被另一個命令寫入的文件的數據時,就是這種情況),請使用 -f 選項讓 tail 持續讀取來自指定文件的數據並將這些數據發送至 tail 自己的標准輸出中。通過管道發送數據時該選項會被忽略。因此,cat file tail -f 將不會得到所期望的結果,但 tail -f file 則可以。 (如果 tail 正在讀取的文件不止一個,那麼各行內容之間將用標准頭信息隔開,以指明它們來自哪個文件,標准頭信息以 ==> 開頭。) 這個選項用於監視系統日志再合適不過,譬如,在單獨的終端窗口(或單獨的控制台)中執行的 tail -f /var/log/Access.log 將持續打印每次點擊後新添加的 Apache 訪問日志條目,一直到您用 Ctrl-C 停止它為止。 通過組合使用 head 和 tail,可以從文件的中間部分讀取給定長度的一塊數據!下面說明如何做到:假定您想從文件開頭算起第 1000 字節處開始讀取一塊 789 字節的數據。可以使用 cat file head -c 1788 tail -c 789 來解決這一問題。
使用 tac 命令逆序排序文件 如果您想對文件中的各行進行逆序排序,該怎麼做呢?這就要用到 tac 命令。(請注意,tac 由 cat 逆序拼寫而成。)該命令對所列出的文件中的各行或各段進行逆序排序。 該命令不能逆序排序各文件的順序 — 這個任務您得自己做,以逆向順序在 tac 命令後列出各文件即可。作為說明 tac 的工作原理的示例,請在您的主目錄中對一些文件使用 ls -l tail 和 ls -l tail tac,比較其結果。