文本处理工具
查看文本的命令: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
转载于:https://blog.51cto.com/9978302/2121345