第七章 linux文本處理工具
文本處理工具
抽取文本的工具
文件內容:less和cat
文件截取:head和tail
按列抽取:cut
按關鍵字抽取:grep
文件查看
文件查看命令:cat, tac,rev
cat [OPTION]... [FILE]...
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
tac:行的反向顯示
rev:列的反向顯示
nl:加行號,空行不加行號。
分頁查看文件內容
more: 分頁查看文件
more [OPTIONS...] FILE...
-d: 顯示翻頁及退出提示
less:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/文本搜索文本
n/N跳到下一個或上一個匹配
less命令是man命令使用的分頁器
顯示文本前或後行內容
head [OPTION]... [FILE]...
-c #: 指定獲取前#字節
-n #: 指定獲取前#行
-#:指定行數
tail [OPTION]... [FILE]...
-c #: 指定獲取後#字節
-n #: 指定獲取後#行
-#:
-f: 跟蹤顯示文件fd新追加的內容,常用日誌監控
相當於--follow=descriptor
-F: 跟蹤文件名,相當於—follow=name --retry(文件沒了就提示,小f不提示)
tailf類似tail –f,當文件不增長時並不訪問文件(節省資源)
[root@centos7 /dev]#tail -f /app/a -n0 &
&後臺運行實時觀察a文件的內容變化,-n0如果有新行就出現,舊行不要。
fg和bg:前臺和後臺運行程序
按列抽取文本cut和合並文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默認tab鍵作為分隔符。
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c按字符切割
--output-delimiter=STRING指定輸出分隔符
[root@centos7 ~]#cut -d: -f1,3/etc/passwd root:0 bin:1 daemon:2
以:為分隔符,去除其中的用戶名和uid。
[root@centos7 ~]#cut -d: -f1,3 --output-delimiter=* /etc/passwd root*0 bin*1 daemon*2 adm*3 lp*4
指定輸出的分隔符為*
cut和paste
顯示文件或STDIN數據的指定列
cut-d:-f1/etc/passwd
cat /etc/passwd|cut-d:-f7
cut-c2-5/usr/share/dict/words
paste 合並兩個文件同行號的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
分析文本的工具
文本數據統計:wc
整理文本:sort
比較文件:diff和patch
收集文本統計數據wc
計數單詞總數、行總數、字節總數和字符總數(linux中一個漢字三個字節,一個字母一個字節)
字符和字節是兩個概念,字節是磁盤上占用的空間大小
可以對文件或STDIN中的數據運行
wc story.txt
39 237 1901 story.txt
行數 字數 字節數
常用選項
-l 只計數行數
-w 只計數單詞總數
-c 只計數字節總數
-m 只計數字符總數
-L 顯示文件中最長行的長度
文本排序sort
把整理過的文本顯示在STDOUT,不改變原始文件
sort[options]file(s)
常用選項
-r執行反方向(由上至下)整理
-n執行按數字大小整理(有小到大)
-f選項忽略(fold)字符串中的字符大小寫
-u選項(獨特,unique)刪除輸出中的重復行
-t c選項使用c做為字段界定符
-k X選項按照使用c字符分隔的X列來整理能夠使用多次
uniq
uniq命令:從輸入中刪除前後相接的重復的行
uniq[OPTION]... [FILE]...
-c: 顯示每行重復出現的次數
-d: 僅顯示重復過的行
-u: 僅顯示不曾重復的行
連續且完全相同方為重復
常和sort 命令一起配合使用:
sort userlist.txt | uniq-c
比較文件
比較兩個文件之間的區別
diff:比較兩個文件的內容,並不比較兩個文件的屬性
difffoo.conffoo2.conf
5c5
< use_widgets=no
---
> use_widgets=yes
註明第5行有區別(改變)
復制對文件改變patch
diff命令的輸出被保存在一種叫做“補丁”的文件中
使用-u選項來輸出“統一的(unified)”diff格式文件,最適用於補丁文件
patch復制在其它文件中進行的改變(要謹慎使用)
適用-b選項來自動備份改變了的文件
$diff -u foo.conf foo2.conf>foo.patch
$patch -b foo.conf foo.patch
[root@centos7 /app]#cp /etc/fstab f3 [root@centos7 /app]#cp /etc/fstab f4 [root@centos7 /app]#echo a >>f4 [root@centos7 /app]#diff f3 f4 -u >f3f4.diff [root@centos7 /app]#ll total 12 -rw-r--r--. 1 root root 595 Nov 21 09:14 f3 -rw-r--r--. 1 root root 392 Nov 21 09:15 f3f4.diff -rw-r--r--. 1 root root 597 Nov 21 09:14 f4 [root@centos7 /app]#rm -f f4 [root@centos7 /app]#patch -b f3 f3f4.diff patching file f3 [root@centos7 /app]#ll total 12 -rw-r--r--. 1 root root 597 Nov 21 09:15 f3 -rw-r--r--. 1 root root 392 Nov 21 09:15 f3f4.diff -rw-r--r--. 1 root root 595 Nov 21 09:14 f3.orig
創建f3、f4將兩文件不同結果輸出到文件f3f4.diff中刪除f4,使用patch找回f4,
但找回的文件其實是f3變成了f4,f3實際為備份的f3.orig,通過文件大小也能對比出來。
第七章 linux文本處理工具