Linux下面有很多經典的非常有用的命令,其中處理文本的命令就有很多。這些小工具經過了幾十年時間的洗禮,現在已經變成了經典,已經變成了Linux下面的標準,其實它們一直是遵循著Linux的標準。下面就讓我們一起看看這些經典的Linux文本處理命令。
一. sort
檔案排序,通常用在管道中當過濾器來使用。這個命令可以依據指定的關鍵字或指定的字元位置,對檔案行進行排序。使用-m選項,它將會合并預排序的輸入檔案。想瞭解這個命令的全部參數請參考這個命令的info頁。
二. tsort
拓撲排序,讀取以空格分隔的有序對,並且依靠輸入模式進行排序。
三. uniq
這個過濾器將會刪除一個已排序檔案中的重複行。這個命令經常出現在sort命令的管道後邊。
四. expand, unexpand
expand命令將會把每個tab轉化為一個空格。這個命令經常用在管道中。
unexpand命令將會把每個空格轉化為一個tab。效果與expand命令相反。
五. cut
一個從檔案中提取特定域的工具。這個命令與awk中使用的print $N命令很相似,但是更受限。在指令碼中使用cut命令會比使用awk命令來得容易一些。最重要的選項就是-d(欄位定界符)和-f(域分隔字元)選項。
六. paste
將多個檔案, 以每個檔案一列的形式合并到一個檔案中,合并後檔案中的每一列就是原來的一個檔案。與cut結合使用,經常用於建立系統log檔案。
七. join
這個命令與paste命令屬於同類命令。但是它能夠完成某些特殊的目地。這個強力工具能夠以一種特殊的形式來合并兩個檔案,這種特殊的形式本質上就是一個關聯資料庫的簡單版本。
join命令只能夠操作兩個檔案。它可以將那些具有特定標記域(通常是一個數字標籤)的行合并起來,並且將結果輸出到stdout。被加入的檔案應該事先根據標記域進行排序以便於能夠正確的匹配。
八. head
把檔案的頭部內容列印到stdout上(預設為10行,可以自己修改)。這個命令有一些比較有趣的選項。
九. tail
將一個檔案結尾部分的內容輸出到stdout中(預設為10行)。通常用來跟蹤一個系統logfile的修改情況,如果使用-f選項的話,這個命令將會繼續顯示添加到檔案中的行。
十. wc
wc可以統計檔案或I/O流中的"單詞數量"。
十一. fold
將輸入按照指定寬度進行折行。這裡有一個非常有用的選項-s,這個選項可以使用空格進行斷行(譯者:事實上只有外文才需要使用空格斷行,中文是不需要的)(請參考例子 12-23和例子 A-1)。
十二. fmt
一個簡單的檔案格式器。通常用在管道中,將一個比較長的文本行輸出進行"折行"。
十三. col
這個命令用來濾除標準輸入的反向分行符號號。這個工具還可以將空白用等價的tab來替換。col工具最主要的應用還是從特定的文本處理工具中過濾輸出,比如groff和tbl。(譯註:主要用來將man頁轉化為文本。)
十四. column
列格式化工具。通過在合適的位置插入tab,這個過濾工具會將列類型的文本轉化為"易於列印"的表格式進行輸出。
十五. colrm
列刪除過濾器。這個工具將會從檔案中刪除指定的列(列中的字串)並且寫到檔案中,如果指定的列不存在,那麼就回到stdout。colrm 2 4 <filename將會刪除filename檔案中每行的第2到第4列之間的所有字元。
Caution:如果這個檔案包含tab和不可列印字元,那將會引起不可預期的行為。在這種情況下,應該通過管道的手段使用expand和unexpand來預先處理colrm。
十六. nl
計算行號過濾器。nl filename將會把filename檔案的所有內容都輸出到stdout上,但是會在每個非空行的前面加上連續的行號。如果沒有filename參數,那麼就操作stdin。
nl命令的輸出與cat -n非常相似,然而,預設情況下nl不會列出空行。
十七. pr
格式化列印過濾器。這個命令會將檔案(或stdout)分頁,將它們分成合適的小塊以便於硬拷貝列印或者在螢幕上瀏覽。使用這個命令的不同的參數可以完成好多任務,比如對行和列的操作,加入行,設定頁邊,計算行號,添加頁首,合并檔案等等。pr命令集合了許多命令的功能,比如nl, paste, fold, column, 和expand。
pr -o 5 --width=65 fileZZZ | more 這個命令對fileZZZ進行了比較好的分頁,並且列印到螢幕上。檔案的縮排被設定為5,總寬度設定為65。
一個非常有用的選項-d,強制隔行列印(與sed -G效果相同)。
十八. gettext
GNU gettext包是專門用來將程式的輸出翻譯或者本地化為不同國家語言的工具集。在最開始的時候僅僅支援C語言,現在已經支援了相當數量的其它程式語言和指令碼語言。
想要查看gettext程式如何在shell指令碼中使用,請參考info頁。
十九. msgfmt
一個產生二進位訊息目錄的程式。這個命令主要用來本地化。
二十. iconv
一個可以將檔案轉化為不同編碼格式(字元集)的工具。這個命令主要用來本地化。
二十一. recode
可以認為這個命令是上邊iconv命令的專業版本。這個非常靈活的並可以把整個檔案都轉換為不同編碼格式的工具並不是Linux標準安裝的一部分。
二十二. TeX, gs
TeX和Postscript都是文本標記語言,用來對列印和格式化的視頻顯示進行預拷貝。
TeX是Donald Knuth精心製作的排版系統。通常情況下,通過編寫指令碼的手段來把所有的選項和參數封裝起來一起傳到標記語言中是一件很方便的事情。
Ghostscript (gs) 是一個 遵循GPL的Postscript解譯器。
二十三. enscript
將純文字檔案轉換為PostScript的工具,
比如, enscript filename.txt -p filename.ps 產生一個 PostScript 輸出檔案filename.ps。
二十四. groff, tbl, eqn
另一種文本標記和顯示格式化語言是groff。這是一個對傳統UNIX roff/troff顯示和排版包的GNU增強版本,Man頁使用的就是groff。
tbl表處理工具可以認為是groff的一部分,它的功能就是將表標記轉化到groff命令中。
eqn等式處理工具也是groff的一部分, 它的功能是將等式標記轉化到groff命令中。
二十五. lex, yacc
lex是用於模式比對的詞彙分析產生程式,在Linux系統上這個命令已經被flex取代了。
yacc工具基於一系列的文法規範,產生一個文法分析器。在Linux系統上這個命令已經被bison取代了。
二十六. tr
字元轉換過濾器。