1.5.1 文件查看cat,tac,rev,more,less,head,tail
1.5.1.1 文件查看命令:cat,tac,rev
- cat [OPTION]... [FILE]...
-
-E: 显示行结束符$
-
-n: 对显示出的每一行进行编号
-
-A:显示所有控制符
-
[root@CentOS7 ~]# cat >>f1 <<EOF
> df
> df
> EOF
> EOF
> ##为什么没有退出来,EOF后面不能加空格
[root@CentOS7 ~]# cat -A f1
dfl$
dsfj$
[root@CentOS7 ~]# cat -n f1
1 dfl
2 dsfj
[root@CentOS7 ~]# cat -E f1
dfl$
dsfj$
EOF$
dfl$
dsfj$
EOF$
dfj$
- -b:非空行编号
[root@CentOS7 ~]# cat -b f1
1 dfl
2 dsfj
3 EOF
4 dfl
5 dsfj
6 EOF
7 dfj
8 fdksfl
9 dfj
10 fdksfl
11 dfj
12 fdksfl
- -s:压缩连续的空行成一行
[root@CentOS7 ~]# cat f1
dfl
dsfj
EOF
dfl
dsfj
EOF
[root@CentOS7 ~]# cat -s f1
dfl
dsfj
EOF
dfl
dsfj
EOF
- tac:逆序
[root@CentOS7 ~]# tac f1
fdksfl
dfj
fdksfl
dfj
fdksfl
dfj
EOF
dsfj
dfl
EOF
dsfj
- rev:逆序(文件中的每一行都倒着显示)
[root@CentOS7 ~]# rev f1
lfd
jfsd
FOE
lfd
jfsd
FOE
jfd
lfskdf
1.5.1.2 more
- 分页查看文件
more [OPTIONS...] FILE...
- -d: 显示翻页及退出提示
1.5.1.3 less
一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器
1.5.1.4 head
head [OPTION]... [FILE]...
- -c #: 指定获取前#字节
[root@CentOS7 data]# head -c4 /etc/passwd
root[root@CentOS7 data]# head -c8 /etc/passwd
root:x:0[root@CentOS7 data]#
-
-n #: 指定获取前#行
-
-#: 指定行数
[root@CentOS7 data]# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
1.5.1.5 tail
tail [OPTION]... [FILE]...
-
-c #: 指定获取后#字节
-
-n #: 指定获取后#行相当于-#
-
-f: 跟踪显示文件fd新追加的内容,常用日志监控相当于 --follow=descriptor
-
-F: 跟踪文件名,相当于—follow=name --retry
tailf 类似tail –f,当文件不增长时并不访问文件
1.5.2 按列抽取文本cut
cut [OPTION]... [FILE]...
显示文件或STDIN数据的指定列
-
-d DELIMITER: 指明分隔符,默认tab
-
-f FILEDS:
-
#: 第#个字段
-
#,#[,#]:离散的多个字段,例如1,3,6
-
#-#:连续的多个字段, 例如1-6,混合使用:1-3,7
-
-c 按字符切割
-
--output-delimiter=STRING指定输出分隔符
显示文件或STDIN数据的指定列
[root@CentOS7 data]# cat /etc/passwd |cut -d: -f1
root
bin
daemon
adm
lp
sync
[root@CentOS7 data]# cut -d: -f1 /etc/passwd ##取出用户名
[root@CentOS7 data]# cat /etc/passwd | cut -d: -f7
/bin/bash
/sbin/nologin
[root@CentOS7 data]#cut -c2-5 /usr/share/dict/words
##取出第二到第五个字节
1.5.3 paste
合并两个文件同行号的列到一行(横向合并)
paste [OPTION]... [FILE]...
- -d 分隔符:指定分隔符,默认用TAB
- -s : 所有行合成一行显示
[root@CentOS7 scripts]# cat f1
aaa
bb
cc
[root@CentOS7 scripts]# cat f2
xxx
yy
[root@CentOS7 scripts]# paste f1 f2
aaa xxx
bb yy
cc
[root@CentOS7 scripts]# cat f1 f2
aaa
bb
cc
xxx
yy
[root@CentOS7 scripts]# cat f1 f2 >f4
[root@CentOS7 scripts]# cat f4
aaa
bb
cc
xxx
yy
[root@CentOS7 scripts]# paste -s f1 f2
aaa bb cc
xxx yy
[root@CentOS7 scripts]# paste -d ":" f1 f2
aaa:xxx
bb:yy
cc:
1.5.4 收集文本统计数据wc
-
计数单词总数、行总数、字节总数和字符总数
-
可以对文件或STDIN中的数据运行
-
wc story.txt
39 237 1901 story.txt
行数 字数 字节数 文件名
-
常用选项
-
-l 只计数行数
-
-w 只计数单词总数
-
-c 只计数字符总数
-
-L 显示文件中最长行的长度
-
[root@CentOS7 data]# cat /etc/passwd |wc -l
64
[root@CentOS7 data]# cat /etc/passwd |wc -L
99
[root@CentOS7 data]# cat /etc/passwd |wc -c
3171
[root@CentOS7 data]# cat /etc/passwd |wc -w
109
1.5.5 文本排序sort
sort [options] file(s)
默认排序会把相同的行放在一块
常用选项
-
-r 执行反方向(由上至下)整理
-
-R 随机排序
[root@CentOS7 scripts]# seq 72 |sort -R |head -n1
35 ##随机排序,取出随机数,抽奖
-
-n 执行按数字大小整理
-
-f 选项忽略(fold)字符串中的字符大小写
-
-u 选项(独特,unique)删除输出中的重复行
-
-t : 选项使用:做为字段界定符
-
-k # 选项按照使用c字符分隔的#列来整理能够使用多次 #(为数字)
练习:统计一篇英文文章中,单词出现频率最高的前3个单词
[root@CentOS7 data]# cat f1|tr " " "
"|tr -d [:punct:]|sort|uniq -c|sort -n|tail -n3
9 and
9 of
15 the
1.5.6 uniq 默认会将重复行排序到一起
uniq命令:从输入中删除前后相接的重复的行
uniq [OPTION]... [FILE]...
-
-c: 显示每行重复出现的次数
-
-d: 仅显示重复过的行
-
-u: 仅显示不曾重复的行
注:连续且完全相同方为重复-
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
实验:对/var/log/httpd/access_log 日志文件访问ip进行排序,取出访问量最高的前十个ip
cat /var/log/httpd/access_log | cut -d" " -f1|sort |uniq -c |sort -nr|head -n10
1.5.7 比较文件diff 命令
比较两个文件之间的区别
[root@CentOS7 data]# diff foo.conf foo2.conf
5c5
< use_widgets = no
---
> use_widgets = yes ##注明第5行有区别(改变)
1.5.8 复制对文件改变patch
diff 命令的输出被保存在一种叫做“补丁”的文件中
使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
patch 复制在其它文件中进行的改变(要谨慎使用) 适用
-b 选项来自动备份改变了的文件
$ diff -u foo.conf foo2.conf > foo.patch
##将文件foo.conf和foo2.conf比较差异,将生成的补丁放到foo.patch++
$ patch foo.conf foo.patch
##将foo.conf打上补丁就变成了foo2.conf文件中的内容,不过foo.conf文件内容就被覆盖了
$ patch -b foo.conf foo.patch
##将foo.conf先备份,后打补丁,找回foo2.conf
练习:
1、找出ifconfig “网卡名”命令结果中本机的IPv4地址
[root@CentOS7 scripts]# ifconfig ens33|head -n2 |tail -n1|tr -s ' '|cut -d' ' -f3
192.168.110.131
2、查出分区空间使用率的最大百分比值
[root@CentOS7 scripts]# df |grep "/dev/sd" |tr -s ' ' '%'|cut -d% -f5|sort -n |tail -n1
16
3、查出用户UID最大值的用户名、UID及shell类型
[root@CentOS7 scripts]# cat /etc/passwd |sort -t: -k3 -nr|head -n1|cut -d: -f1,3,7
nfsnobody:65534:/sbin/nologin
4、查出/tmp的权限,以数字方式显示
[root@CentOS7 scripts]# stat /tmp|cut -d'/' -f1|head -n4|tail -n1|cut -d'(' -f2
1777
[root@CentOS7 scripts]# stat /tmp |egrep -o "([0-9]{3,4}"
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
[root@CentOS7 scripts]# netstat -nt |tr -s ' ' :|cut -d: -f6|tr -dc '[0-9].
'|sort|uniq -c |sort -nr
3 192.168.110.1
2
1 192.168.110.128
[root@CentOS7 scripts]# netstat -nt |grep "tcp"|tr -s ' ' ':'|cut -d: -f6|sort |uniq -c |sort -nr
2 192.168.110.1
1 192.168.110.128