小巧精悍——常見文本處理工具用法及技巧總結
Linux最重要的哲學思想就是:一切皆文件??梢娢募拔募僮髟贚inux當中是多么的重要。在Linux系統中我們也會經常用到各種文本文件處理的操作,熟練使用這些小巧精悍的文本處理工具,在關鍵時刻往往展現非凡的神奇功效。常見文本處理小工具:cat、hexdump、nl、less、head、tail、cut、tr、rev、wc、uniq、sort、join、paste、diff、patch。
1、cat
常常被用來讀取文本文件的內容如:cat file1.txt
并且當加上選項的時候可以顯示特殊字符,尤其當我們運行一個腳本總是出錯,檢測各種語法發現沒有問題的時候,可以使用cat -A 來看看是不是文件包含了某些非法字符。
常用選項:
-n 顯示行號
-b 僅非空白行顯示行號
-A 相當于-vET,顯示某些不可見的控制、非打印字符
-E 顯示行尾結束符$
-T 以^I顯示文件中的TAB制表符
-v 以^和M-顯示非打印字符
使用技巧:
a、其實除了用于讀取文件內容,cat還可以被用來創建簡短的文本文件。
cat > abc.txt 編輯完成后按 Ctrl+d 鍵退出
cat > 123.txt << eof 編輯完成后,以單獨的一行“eof”來結束輸入(eof不會加入文件內容)。
b、對文件進行合并輸出,或者將多個文件合并為一個文件。尤其是當我們使用split命令來對大文件分割時,當我們想使用文件的時候,就可以使用cat來進行文件的合并。
cat file1 file2 file3 … > file
2、hexdump
利用hexdump可以方便的以十六進制或八進制格式來查看數據文件。在某些情況下會非常有幫助。
常用選項:
-C 分別以十六進制和ACSII字符顯示文件內容
-n # 只顯示文件的前#個字符
使用技巧:
結合-n選項可以用來查看某設備(磁盤mbr)或二進制文件的頭信息。
3、nl
nl也是一個非常常用的文本查看工具,使用nl查看工具,默認會為每一行添加行號。
4、less
less也是一個讀取文本文件內容的工具,但是less可以分屏顯示,而不是像cat那樣直接把全部的文件內容顯示在屏幕上,這對于內容較多的大型文件的查閱非常方便。并且使用less可以方便的控制上下翻屏,可以使用 /KEYWORD 來按關鍵詞就行搜索。當然less也可以顯示行號,只需要加上-N選項即可。
常用命令:
h 打開幫助信息
q 退出less
j 向下滾動一行
k 向上滾動一行
f 向下翻一屏
b 向上翻一屏
d 向下翻半屏
u 向上翻半屏
g 跳轉至第一行
G 跳轉至最后一行
/pattern 從光標所在處向下搜索指定的pattern
?pattern 從光標所在處向上搜索指定的pattern
n 跳到下一個匹配的搜索關鍵字
N 跳到上一個匹配到的關鍵字
使用技巧:
當某一命令的輸出結果很長,不方便查看的時候,可以使用管道( | )重定向到less進行查看、搜索,如COMMAND | less。
5、head
主要用來查看一個文件的前面的指定部分,默認顯示文件的前10行。
常用選項:
-c # 顯示文件的前#個字符
-n # 顯示文件的前#行,也可直接寫為 -#
使用技巧:
我們知道對于MBR分區的磁盤來說mbr是非常重要的,它記錄這磁盤的引導數據和磁盤的整個分區表。使用head -c 512 /dev/sda > mbr 就可以方便的實現對磁盤mbr(master boot record)的備份了?;謴蚼br,可以使用dd if=mbr of=/dev/sda bs=1 count=512。
6、tail
tail命令剛好和head相反,主要用來查看文件的尾部部分,默認顯示文件的后10行。
常用選項:
-c # 顯示文件的后#個字符
-n # 顯示文件的后#行,也可直接寫為 -#
-f動態顯示文件尾部的新增加內容
使用技巧:
a、tail -n 0 -f file 可以只顯示文件file的新增加內容
b、配合head可以方便的實現取出文件中指定行的操作,如取出文件file中的第#行,可以使用head -n # | tail -n 1
7、cut
用以取出文件或標準輸出中的某些字段(列)。這個工具的強大之處,在于可以根據具體情況指定各個字段的分隔符號。
常用選項:
-d 用于指明進行分割的分隔符,默認以tab鍵進行分隔
-f 用于指定要取出的某些字段
#: 第# 個字段
#,#[,#] :離散的多個字段,例如1,3,6
#-# : 連續的多個字段, 例如1-6
#-: 從第#個字段往后的所有字段
-c 按字符進行分隔,取出指定的字符或字符串
-s 對不包含分隔符的行,不進行處理
–output-delimiter= 指定輸出樣式中各字段的分隔符
8、tr
tr主要用于進行字符替換或刪除。tr的強大在于,它不僅可以操作普通字符,還可以操作控制字符,并且可以對需要的字符進行替換、刪除、壓縮(去重),靈活的運用這些功能,往往可以實現不凡的功效。
常用選項:
-d 刪除文件中包含在給定字符集中的字符
-c 對給定的字符集取反
-s 給定的字符集,如果在文件中多次連續出現,則刪除重復只保留一個
使用技巧:
a、當要使用cut想取出某個文件的特定字段時,往往會出現這些字段之間有多個空格進行分隔,并且每行各字段之間的空格數量各不相等。對于這種情況,就可以使用tr -s ‘ ‘對文件中的重復空格進行壓縮處理,使每個字段之間以單個空格進行分隔,然后再使用cut -d’ ‘ -f就可以方便的取出目標字段了。
b、對于某些文件中只有回車的空白行(非第一行),借助tr -s ‘\n’ 可以實現刪除空白行。
9、rev
使用rev可以實現字符串的左右倒轉。對于某些長度不固定,或者字段數量不固定的情況,我們如果要取出最后的幾個字段或字符,按常規的方法往往非常困難。這時利用rev結合就可以方便的實現:rev|cut|rev。
10、wc
wc主要實現對文本的統計功能,結合相應的選項,可以實現對文件按字符、字節、單詞、行數進行統計。
常用選項:
-c 按字節進行統計
-m 按字符進行統計
-l 按行進行統計
-w 按單詞進行統計
注意事項:
wc的輸出結果包含條件的最終數量結果,同時包含有文件名,在某些情況下,若想要單獨輸出數字結果,需要結合cut取出第一個字段即可。
11、uniq
uniq主要對文件中的連續重復行進行操作,在Linux的操作過程中也是經常會用到的。
常用選項:
-c 顯示重復行的重復次數
-d 只顯示重復的行
-u 僅顯示不重復的行
-i 忽略字符的大小寫
注意事項:
uniq所定義的重復的前后連續重復的行,而不是整個文件中的重復行,在實際的應用中要統計整個文件中的重復行,我們往往需要結合sort命令來進行大致排序,讓整個文件中重復的行前后相連續,如何再用uniq進行統計或操作。
12、sort
sort主要實現對文件中的內容以行為單位進行排序,默認以第一個字符進行排序,也可結合選項指定排序的關鍵詞字段。
常用選項:
-t 指定各字段的分隔符
-k 指定按某字段的關鍵詞進行排序
-u 刪除(不輸出)重復的行
-f 忽略字符大小寫
-n 以數字的數值大小進行排序
-r 對排序結果,以反序輸出
注意事項:
a、sort的執行默認是按字符進行排序的,各字符的排序順序012…789aAbB…zZ。如果不指定排序的關鍵詞字段,默認以第一個字符進行排序,第一個字符相同的按第二個字符排序,以此類推。
b、對于數字的排序,默認也是按a中所說的字符進行排序,若要要數字的大小進行排序需要使用 -n 選項。
13、join
用來合并兩個文件。當兩個經過排序的文件,其中某個字段內容相同,則可以將另一個文件中該字段對應的其他字段內容合并到第一個文件中對應字段的后面。默認兩個文件按第一個字段進行對比,各字段之間以空格分隔。
常用選項:
-a 文件中指定字段含有沒有匹匹配的行,同樣進行輸出
-t 指定字段的分隔符
-1# 指定文件1按第#個字段進行匹配
-2# 指定文件2按第#個字段進行匹配
-i 在進行比較時忽略大小寫
14、paste
paste和join命令很相似,但是paste沒有進行比較的字段,而是將后面的文件,按對應行直接合并到第一個文件的對應行后面。
常用選項:
-d 指明合并后兩個文件內容之間的分隔符,默認以tab鍵分隔
-s 將各文件輸出在一行上,各文件分別按行輸出
15、diff
用于比較兩個文件的不同之處,尤其在對某些大型文件進行修改之后,想要找到哪些地方做過修改,往往比較困難,利用diff可以很方便的定位。另外結合輸出重定向,diff也經常被用來制作補??;指定不同的選項,可以輸出不同格式的補丁文件。
16、patch
根據diff生成的補丁文件,可以對用來的文件進行修改、升級,也可以根據補丁文件對升級后的文件進行降級、還原。
用法:patch file patchfile
原創文章,作者:M21-張國輝,如若轉載,請注明出處:http://www.www58058.com/57691