Linux文本處理工具
文件內容查看的工具:cat tac rev
cat?[options]?[filename] ????-E?//顯示行結束符 ????-n?//對顯示出的行編號 ????-A?//顯示所有控制符 ????-b?//非空行編號 ????-S?//壓縮連續的空行為一行 tac?//用于將文件已行為單位的反序輸出,即第一行最后顯示,最后一行先顯示 rev?//rev命令將文件中的每行內容以字符為單位反序輸出,即第一個字符最后輸 ????????出,最后一個字符最先輸出
分頁查看文本內容: more less
more是基于vi編輯器的文本過濾器,less的功能和more差不多,使用less或more顯示時,有相同的功能鍵:
– 按Space鍵:顯示文本的下一屏內容
– 按Enier鍵:只顯示文本的下一行內容
– 按H鍵:顯示幫助屏,該屏上有相關的幫助信息
– 按B鍵:顯示上一屏內容
– 按Q鍵:退出more命令
more?-n?//指定每屏顯示n行? ?????-d?//顯示“[press?space?to?continue,'q'?to?quit.]”和“[Press?'h'?for?instructions]”? ?????-c?//不進行滾屏操作每次刷新這個屏幕? ?????-s?//將多個空行壓縮成一行顯示? ?????-u?//禁止下劃線? ?????+n?//從指定數字n的行開始顯示 less?-e?//文件內容顯示完畢后,自動退出? ?????-f?//強制顯示文件? ?????-g?//不加亮顯示搜索到的所有關鍵詞,僅顯示當前顯示的關鍵字,以提高顯示速度? ?????-l?//搜索時忽略大小寫的差異? ?????-N?//每一行行首顯示行號? ?????-s?//將連續多個空行壓縮成一行顯示? ?????-S?//在單行顯示較長的內容,而不換行顯示
顯示文本前或后行內容
head?[options]?[filename] ????????用于顯示文件開頭的內容,默認顯示10行 ?????-n?//顯示文件開頭n行 ?????-c?n?//顯示文件開頭內容n個字符 tail?[options]?[filename] ????????用于顯示文件末尾的內容,默認顯示10行 ?????-c?n?//顯示文件末尾n個字符 ?????-n?//顯示文件末尾n行 ?????-f?//跟蹤顯示文件追加的內容,常用作日志監控
文本抽取工具
cut?用來顯示行中制定部分,刪除指定字段 ?????-b?//僅顯示行中制定范圍字符??????????? ?????-d?//指定字段分隔符 ?????-f?//顯示制定字段內容和-d組合使用 ????????如cut?-d:?-f7?//表示以冒號為分隔符,取第七列的字段 ?????-c?//顯示指定范圍的字符,用法: ????????cut?-c-5?filename?//顯示文件中每行的前五個字符 ????????cut?-c5-?filename?//顯示文件中每行從第五個字符開始到最后的字符
分析文本
sort?文本排序工具??????????? ?????-t?//分隔符 ?????-k?//以分隔符的第幾列排序 ?????-n?//以數字方式排序 ?????-r?//倒序排列 ?????-u?//去除重復項 ?????-f?//忽略大小寫???????? wc?文本統計工具 ????默認顯示顯示行數?單詞數?及?字節數 ?????-l?//顯示行數 ?????-w?//顯示單詞數 ?????-c?//顯示字節數 ?????-m?//顯示字符數
文本去重工具
uniq?去除連續的重復行,僅保留一行 ?????-u?//去除連續的重復行,不保留 ?????-d?//僅顯示重復的行,去除不重復的行 ?????-c?//顯示的結果前顯示重復的次數
Linux文本處理三劍客 ? grep sed awk
grep(global search regular expression(RE)and print out the line,全局搜索正則表達式(re)并打印出該行),
它是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來
- 選項
grep?--color=auto?//關鍵字高亮顯示 ?????-v?//反選 ?????-n?//顯示行號 ?????-c?//顯示匹配行的數量 ?????-i?//忽略大小寫 ?????-q?//靜默輸出,即什么也不輸出 ?????-A?n?//顯示關鍵字及其下n行 ?????-B?n?//顯示關鍵字及其上n行 ?????-C?n?//顯示關鍵字及其上下n行 ?????-e?//實現多個選項間的邏輯or關系 ?????-w?//匹配整個單詞 ?????-E?或?egrep?//使用擴展正則 ?????-F?或?fgrep?//不使用正則
sed是一種流編輯器,它是文本處理中非常中的工具,能夠配合正則表達式使用
- 命令格式
sed?[options]?'command'?file(s)? sed?[options]?-f?scriptfile?file(s)
- 命令選項
sed?-i?更改原文件 ????-i.bak?在更改前將原文件備份為.bak ????-n?不打印 ????-e?多模式 ????-f?sed.txt?指定scripts的文件 ????-r?指定擴展正則 ????sed命令 ????p打印 ????d刪除 ????a在指定行后增加 ????i在指定行前增加 ????c替換指定行 ????w將模式空間的行寫入指定文件 ????r將文件中的內容讀入模式空間 ????=:?為模式空間中的行打印行號 ????!:模式空間中匹配行取反處理
- 高級用法
seq?9?|sed?'n;d'?打印奇數行 seq?9?|sed?-n?'n;p'?打印偶數行 seq?9?|sed?'1!G;h;$!d'??倒序顯示?或?seq?9?|sed?-n?'1!G;h;$p' seq?9?|sed?'N;D'?顯示最后一行?或?seq?9?|sed?'$!d' seq?9?|sed?'$!N;$!D'??顯示最后兩行 seq?9?|sed?'G'?每一行后加一個空行 seq?9?|sed?'g'?原有的行全替換為空行 seq?9?|sed?'/^$/d;G'?使每一行后有一個空行
awk 是一種更具靈活性的編程語言,用于在linux/unix下對文本和數據進行處理。數據可以來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等功能,是linux/unix下的一個強大編程工具。它可以在命令行中使用,但更多是作為腳本來使用。
- 命令格式
awk?[options]?'script'?var=value?file(s)? awk?[options]?-f?scriptfile?var=value?file(s)
- 選項
-F?fs???fs指定輸入分隔符,fs可以是字符串或正則表達式,如-F:? -v?var=value???賦值一個用戶定義變量,將外部變量傳遞給awk? -f?scripfile??從腳本文件中讀取awk命令? -m[fr]?val???對val值設置內在限制,-mf選項限制分配給val的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
- 模式
模式可以是以下任意一個:
-?/正則表達式/:使用通配符的擴展集。?-?關系表達式:使用運算符進行操作,可以是字符串或數字的比較測試。-?模式匹配表達式:用運算符~(匹配)和~!(不匹配)。?-?BEGIN語句塊、pattern語句塊、END語句塊:參見awk的工作原理
- 操作
操作由一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,并位于大括號內,主要部分是:
-?變量或數組賦值?-?輸出命令?-?內置函數?-?控制流語句
- awk內置變量
$n?當前記錄的第n個字段,比如n為1表示第一個字段,n為2表示第二個字段。?$0?這個變量包含執行過程中當前行的文本內容。?[N]?ARGC?命令行參數的數目。?[G]?ARGIND?命令行中當前文件的位置(從0開始算)。?[N]?ARGV?包含命令行參數的數組。?[G]?CONVFMT?數字轉換格式(默認值為%.6g)。?[P]?ENVIRON?環境變量關聯數組。?[N]?ERRNO?最后一個系統錯誤的描述。?[G]?FIELDWIDTHS?字段寬度列表(用空格鍵分隔)。?[A]?FILENAME?當前輸入文件的名。?[P]?FNR?同NR,但相對于當前文件。?[A]?FS?字段分隔符(默認是任何空格)。?[G]?IGNORECASE?如果為真,則進行忽略大小寫的匹配。?[A]?NF?表示字段數,在執行過程中對應于當前的字段數。?[A]?NR?表示記錄數,在執行過程中對應于當前的行號。?[A]?OFMT?數字的輸出格式(默認值是%.6g)。?[A]?OFS?輸出字段分隔符(默認值是一個空格)。?[A]?ORS?輸出記錄分隔符(默認值是一個換行符)。?[A]?RS?記錄分隔符(默認是一個換行符)。?[N]?RSTART?由match函數所匹配的字符串的第一個位置。?[N]?RLENGTH?由match函數所匹配的字符串的長度。?[N]?SUBSEP?數組下標分隔符(默認值是34)。
以上三種文本處理工具都支持使用正則表達式
- 元字符集
字符匹配
^?匹配行開始,如:/^sed/匹配所有以sed開頭的行。? $?匹配行結束,如:/sed$/匹配所有以sed結尾的行。? .?匹配一個非換行符的任意字符,如:/s.d/匹配s后接一個任意字符,最后是d。? *?匹配0個或多個字符,如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行。 .*?匹配任意長度的任意字符? []?匹配一個指定范圍內的字符,如/[ss]ed/匹配sed和Sed。? [^]?匹配一個不在指定范圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。 [:alnum:]?字母和數字? [:alpha:]?代表任何英文大小寫字符,亦即A-Z,?a-z? [:lower:]?小寫字母??[:upper:]?大寫字母? [:blank:]?空白字符(空格和制表符)? [:space:]?水平和垂直的空白字符(比[:blank:]包含的范圍廣)? [:cntrl:]?不可打印的控制字符(退格、刪除、警鈴...)? [:digit:]?十進制數字[:xdigit:]十六進制數字? [:graph:]?可打印的非空白字符? [:print:]?可打印字符? [:punct:]?標點符號
次數匹配
\??匹配其前面的字符0或1次? \+?匹配其前面的字符至少1次? \{n\}?匹配前面的字符n次? \{m,n\}?匹配前面的字符至少m次,至多n次? \{,n\}?匹配前面的字符至多n次? \{n,\}?匹配前面的字符至少n次
原創文章,作者:KX_il,如若轉載,請注明出處:http://www.www58058.com/86306
非常細致的作業!