1. 程式人生 > >第七章 linux文本處理工具

第七章 linux文本處理工具

unifi 翻頁 後臺運行 重復 script put tor 出現的次數 div

文本處理工具

抽取文本的工具

文件內容: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文本處理工具