文本处理工具

查看文本的命令:***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 01 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