Linux下常用文本處理命令
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
字符轉換過濾器。