天天看點

Linux下常用文本處理指令

linux下面有很多經典的非常有用的指令,其中處理文本的指令就有很多。這些小工具經過了幾十年時間的洗禮,現在已經變成了經典,已經變成了linux下面的标準,其實它們一直是遵循着linux的标準。下面就讓我們一起看看這些經典的linux文本處理指令。

<a target="_blank"></a>

檔案排序, 通常用在管道中當過濾器來使用. 這個指令可以依據指定的關鍵字或指定的字元位置, 對檔案行進行排序. 使用-m選項, 它将會合并預排序的輸入檔案. 想了解這個指令的全部參數請參考這個指令的info頁.

拓撲排序, 讀取以空格分隔的有序對, 并且依靠輸入模式進行排序.

這個過濾器将會删除一個已排序檔案中的重複行. 這個指令經常出現在sort指令的管道後邊.

expand指令将會把每個tab轉化為一個空格. 這個指令經常用在管道中.

unexpand指令将會把每個空格轉化為一個tab. 效果與expand指令相反.

一個從檔案中提取特定域的工具. 這個指令與awk中使用的print $n指令很相似, 但是更受限. 在腳本中使用cut指令會比使用awk指令來得容易一些. 最重要的選項就是-d(字段定界符)和-f(域分隔符)選項.

将多個檔案, 以每個檔案一列的形式合并到一個檔案中, 合并後檔案中的每一列就是原來的一個檔案. 與cut結合使用, 經常用于建立系統log檔案.

這個指令與paste指令屬于同類指令. 但是它能夠完成某些特殊的目地. 這個強力工具能夠以一種特殊的形式來合并兩個檔案, 這種特殊的形式本質上就是一個關聯資料庫的簡單版本.

join指令隻能夠操作兩個檔案. 它可以将那些具有特定标記域(通常是一個數字标簽)的行合并起來, 并且将結果輸出到stdout. 被加入的檔案應該事先根據标記域進行排序以便于能夠正确的比對.

把檔案的頭部内容列印到stdout上(預設為10行, 可以自己修改). 這個指令有一些比較有趣的選項.

将一個檔案結尾部分的内容輸出到stdout中(預設為10行). 通常用來跟蹤一個系統logfile的修改情況, 如果使用-f選項的話, 這個指令将會繼續顯示添加到檔案中的行.

wc可以統計檔案或i/o流中的"單詞數量":

将輸入按照指定寬度進行折行. 這裡有一個非常有用的選項-s, 這個選項可以使用空格進行斷行(譯者: 事實上隻有外文才需要使用空格斷行, 中文是不需要的)(請參考例子 12-23和例子 a-1).

一個簡單的檔案格式器, 通常用在管道中, 将一個比較長的文本行輸出進行"折行".

這個指令用來濾除标準輸入的反向換行符号. 這個工具還可以将空白用等價的tab來替換. col工具最主要的應用還是從特定的文本處理工具中過濾輸出, 比如groff和tbl. (譯者: 主要用來将man頁轉化為文本.)

列格式化工具. 通過在合适的位置插入tab, 這個過濾工具會将列類型的文本轉化為"易于列印"的表格式進行輸出.

列删除過濾器. 這個工具将會從檔案中删除指定的列(列中的字元串)并且寫到檔案中, 如果指定的列不存在, 那麼就回到stdout. colrm 2 4 &lt;filename将會删除filename檔案中每行的第2到第4列之間的所有字元.

caution: 如果這個檔案包含tab和不可列印字元, 那将會引起不可預期的行為. 在這種情況下, 應該通過管道的手段使用expand和unexpand來預處理colrm.

計算行号過濾器. nl filename将會把filename檔案的所有内容都輸出到stdout上, 但是會在每個非空行的前面加上連續的行号. 如果沒有filename參數, 那麼就操作stdin.

nl指令的輸出與cat -n非常相似, 然而, 預設情況下nl不會列出空行.

格式化列印過濾器. 這個指令會将檔案(或stdout)分頁, 将它們分成合适的小塊以便于硬拷貝列印或者在螢幕上浏覽. 使用這個指令的不同的參數可以完成好多任務, 比如對行和列的操作, 加入行, 設定頁邊, 計算行号, 添加頁眉, 合并檔案等等. pr指令集合了許多指令的功能, 比如nl, paste, fold, column, 和expand.

pr -o 5 --width=65 filezzz | more 這個指令對filezzz進行了比較好的分頁, 并且列印到螢幕上. 檔案的縮進被設定為5, 總寬度設定為65.

一個非常有用的選項-d, 強制隔行列印(與sed -g效果相同).

gnu gettext包是專門用來将程式的輸出翻譯或者本地化為不同國家語言的工具集. 在最開始的時候僅僅支援c語言, 現在已經支援了相當數量的其它程式語言和腳本語言.

想要檢視gettext程式如何在shell腳本中使用. 請參考info頁.

一個産生二進制消息目錄的程式. 這個指令主要用來本地化.

一個可以将檔案轉化為不同編碼格式(字元集)的工具. 這個指令主要用來本地化.

可以認為這個指令是上邊iconv指令的專業版本. 這個非常靈活的并可以把整個檔案都轉換為不同編碼格式的工具并不是linux标準安裝的一部分.

tex和postscript都是文本标記語言, 用來對列印和格式化的視訊顯示進行預拷貝.

tex是donald knuth精心制作的排版系統. 通常情況下, 通過編寫腳本的手段來把所有的選項和參數封裝起來一起傳到标記語言中是一件很友善的事情.

ghostscript (gs) 是一個 遵循gpl的postscript解釋器.

将純文字檔案轉換為postscript的工具

比如, enscript filename.txt -p filename.ps 産生一個 postscript 輸出檔案filename.ps.

另一種文本标記和顯示格式化語言是groff. 這是一個對傳統unix roff/troff顯示和排版包的gnu增強版本. man頁使用的就是groff.

tbl表處理工具可以認為是groff的一部分, 它的功能就是将表标記轉化到groff指令中.

eqn等式處理工具也是groff的一部分, 它的功能是将等式标記轉化到groff指令中.

lex是用于模式比對的詞彙分析産生程式. 在linux系統上這個指令已經被flex取代了.

yacc工具基于一系列的文法規範, 産生一個文法分析器. 在linux系統上這個指令已經被bison取代了.

字元轉換過濾器.

原文釋出時間為:2013-10-23

本文來自雲栖社群合作夥伴“linux中國”