1. 程式人生 > >文本處理工具cat;tac;ver;less;more;head;tail;wc;sort;uniq

文本處理工具cat;tac;ver;less;more;head;tail;wc;sort;uniq

cat;tac;ver;less;mo

文本處理工具

查看文本的命令:cat tac rev less more head tail tailf

***cat:查看文件內容
-A 顯示文本中的所有符號
示例:
[root@ming app]# cat -A cat
a^I $
b $
$
$
c$
$
d$
-E 顯示結束符$
示例:[root@ming app]# cat -E cat
a $
b
-v 顯示windows文件換行符^M
[root@ming app]# cat -v win.txt
ab^M
c^M
-T 顯示TAB的符號^I
[root@ming app]# cat -T cat

a^I
b
-t 相當於vT的和
[root@ming app]# cat -t win.txt
ab ^M
c^I^I^M
-n 輸出行號
[root@ming app]# cat -n cat
1 a
2 b
3
4
5 c
6
7 d

-s 壓縮連續的空行為一行

-b 空行不輸出行號
[root@ming app]# cat -b cat
1 a
2 b

 3  c

 4  d

tac 與cat命令相反,垂直方向倒敘查看文件
[root@ming app]# tac Cat
d
b
a

rev 正行水平方向由後向前顯示
示例:[root@ming app]# cat cat

avcdefg
[root@ming app]# rev cat
gfedcva

less查看大文件對文件或其它輸出進行分頁顯示的工具,應該說是linux正統查看文件內容的工具,功能極其強大。less的用法比起 more 更加的有彈性。 在 more 的時候,我們並沒有辦法向前面翻,只能往後面看,但若使用了 less 時,就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往後翻看文件,更容易用來查看一個文件的內容!除此之外,在 less 裏頭可以擁有更多的搜索功能,不止可以向下搜,也可以向上搜。

/ 文本搜索文本
n/N跳到下一個或上一個匹配
less命令是man命令使用的分頁器

控制按鍵:

b 向後翻一頁
d 向後翻半頁
h 顯示幫助界面
Q 退出less 命令
u 向前滾動半頁
y 向前滾動一行
空格鍵 滾動一行
回車鍵 滾動一頁
[pagedown]: 向下翻動一頁
[pageup]: 向上翻動一頁

more命令 與less相近

***head 顯示文件的頭部默認顯示10行
不設置選項默認顯示10行
[root@ming target]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

-n 指定顯示n行;也可以直接在-後面跟數字

[root@ming target]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
或者
[root@ming target]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

-c n 取文件指定前#字節
[root@ming app]# head -c 10 /etc/passwd
root:x:0:0

***tail命令:查看文件尾部默認顯示文件尾部的10行

不設置選項默認顯示10行
[root@ming target]# tail /etc/passwd
pro2:x:1033:2004::/home/pro2:/bin/bash
pro3:x:1034:2004::/home/pro3:/bin/bash
wangcai:x:1035:1035::/home/wangcai:/bin/bash
alice:x:1036:1036::/home/alice:/bin/bash
tom:x:1037:1037::/home/tom:/bin/bash
bash:x:1046:1046::/home/bash:/bin/nologin
testbash:x:1047:1047::/home/testbash:/bin/nologin
basher:x:1048:1048::/home/basher:/bin/nologin
sh:x:1049:1049::/home/sh:/bin/nologin
nologin:x:1050:1050::/home/nologin:/bin/nologin

-n 指定顯示n行也可以直接跟數字
[root@ming target]# tail -n 2 /etc/passwd
sh:x:1049:1049::/home/sh:/bin/nologin
nologin:x:1050:1050::/home/nologin:/bin/nologin

或者

[root@ming target]# tail -2 /etc/passwd
sh:x:1049:1049::/home/sh:/bin/nologin
nologin:x:1050:1050::/home/nologin:/bin/nologin

-c n 取文件指定後#字節

-f file 動態跟蹤顯示尾部信息基於文件描述符的追蹤,如果文件刪除後就不能追蹤了,比較耗費cpu的IO資源
常用於用於查看日誌相當於--follow=descriptor
-F file 基於文件描述符追蹤,如果文件不增長不會訪問磁盤文件,減少了IO訪問。—follow=name --retry

** 一般head和tail可以搭配使用例如:我想查看文件的11行道15行
示例:head -15 | tail -5

tailf類似tail –f,當文件不增長時並不訪問文件

按例抽取文本:cut 與 合並文件:paste

***cut 截取文件中指定的列
-d "" 默認使用tab作為分隔符;用於指定分隔符""中輸入想要指定的分隔符
-f "" 指定要截取的列,也可以是多個列。
示例: 截取/etc/passwd文件以":"為分隔符的第1列。

[root@ming target]# cat /etc/passwd |cut -d ":" -f1
root
bin
daemon

示例: 截取離散的多列。截取/etc/passwd文件以":"為分隔符的第2和第5列。

[root@ming target]# cat /etc/passwd |cut -d ":" -f2,5
x:root
x:bi

示例:截取連續的多列。截取/etc/passwd文件以":"為分隔符的第2到第5列。
[root@ming target]# cat /etc/passwd | cut -d ":" -f2-5
x:0:0:root
x:1:1:bin
--output-delimiter ="uid"指定輸出分隔符(也可以是中文)
示例:[root@ming app]# cut -d‘:‘ -f1,3 --output-delimiter="的uid是" /etc/passwd
root的uid是0
***paste命令:合並兩個文件同行號的列到一行

-d: 分隔符:指定分隔符,默認用TAB
[root@ming app]# paste -d: a b
adddddddddddddddddddd:ddddddddd:11111111111111111:333333333:55555555555
cccccccccc;eeeeeee:

-s : 所有行合成一行顯示
[root@ming app]# paste -s a b
adddddddddddddddddddd:ddddddddd cccccccccc;eeeeeee
11111111111111111:333333333:55555555555
文件分析工具 wc(統計行數;單詞數;字節數;字符數)sort(排序) uniq(去重) diff(比較文件的區別) patch(合並文件)

wc命令:統計文件內容的參數
-l 統計行數
[root@ming app]# cat /etc/passwd | wc -l
90
-w 統計單詞數
[root@ming app]# cat /etc/passwd | wc -w
136
-c 統計字節數
[root@ming app]# cat /etc/passwd | wc -c
4222
-m 統計字符數
[root@ming app]# cat /etc/passwd | wc -m
4222
-L 顯示最長行長度
[root@ming app]# cat /etc/passwd | wc -L
99
sort [-rnfutk]排序把整理過的文本顯示在STDOUT,不改變原始文件
*** sort是根據系統指定的編碼來排序的;需要指定系統編碼為ACSII:export LC _COLLATE=C(默認使用UTF8,退出用戶後恢復到UTF8)

-r  倒敘顯示
[root@ming app]# cat a
adddddddddddddddddddd:ddddddddd
cccccccccc;eeeeeee
[root@ming app]# cat a |sort -r
cccccccccc;eeeeeee
adddddddddddddddddddd:ddddddddd
-n 按數字大小排序要看系統的編碼指定為ASCII:export --LC_COLLATE=C
[root@ming app]# cat /etc/passwd |cut -d":" -f4|grep -o "[0-9]\+"|sort -n|uniq
0
1
2
4
7
-f 忽略大小寫

***-u刪除重復的行
[root@ming app]# cat /etc/passwd |cut -d":" -f4|grep -o "[0-9]+"|sort -nu
0
1
2
4
7
-t c -k n以c字符作為分隔符的n列排序(c,n可以換成別的字符)
示例:[root@ming app]# cat /etc/passwd|sort -t: -k3
root:x:0:0:root:/root:/bin/bash
ming:x:1000:1000:ming:/home/ming:/bin/bas
uniq(-cdu)命令:從輸入中刪除前後相接的重復的行
-c 顯示重復行出現的次數
[root@ming app]# cat /etc/passwd |grep -o [0-9]|sort -n|uniq -c
140 0
157 1
64 2
40 3
-d 刪除重復的行
-u 見顯示不曾重復的行
centos6: 統計那臺ip訪問本機網頁的次數
1.service httpd start
2.echo hello > /var/www/html/index.html
[root@instructor_v6(nanyibo) html]# cat /var/log/httpd/access_log |cut -d" " -f1 |sort |uniq -c |sort -n -r |head
180 172.18.118.136
102 172.18.118.108
72 192.168.20.1
71 172.18.118.133
70 172.18.118.117
67 172.18.118.127
59 172.18.118.99
58 172.18.118.116
55 172.18.118.94
54 172.18.118.152
diff 比較文件之間的區別
diff file1 file2
-u diff命令的輸出被保存在一種叫做“補丁”的文件中
使用-u選項來輸出“統一的(unified)”diff格式文件,最適用於補丁文件
patch復制在其它文件中進行的改變(要謹慎使用)
適用-b選項來自動備份改變了的文件
diff-ufoo.conffoo2.conf>foo.patch
patch-bfoo.conffoo.patch

總結文本處理工具主要包括:查看文件分別:cat -AETvtnsb;tac;rev;less;more;head -nc;tail-ncfF;tailf
截取合並文件:cut -d指定分隔符 -f第幾列|-c字節數 paste -d -s
排序和去重:sort -nfur-t指定分隔符 -k以第幾列;uniq -cdu
統計: wc -lcwLm

文本處理工具cat;tac;ver;less;more;head;tail;wc;sort;uniq