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

字符轉換過濾器.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章