- 1. 文件查看—{cat,tac,rev,more,less,head,tail,tailf}
- 2. 按列抽取文本—{cut}
- 3. 横向合并:合并两个文件同行号的行到一行—{paste}
- 4. 收集文本统计数据—{wc}
- 5. 文本排序—{sort}
- 6. uniq
- 7. 比较两个文件区别—{diff,patch}
1. 文件查看—{cat,tac,rev,more,less,head,tail,tailf}
----------------------------------------
cat [OPTION]... [FILE]...
-E:显示行结束符$;可用于判断文章中空白部分
-n:对显示出的每一行进行编号
-A:显示所有控制符;可用于判断文章中的所有空白部分(非打印字符等等)
-b:非空行编号
-s:压缩连续的空行成一行
----------------------------------------
tac : 把行数颠倒过来,但是每行的内容不变,进行显示
也就是最后一行变成第一行这样来显示
----------------------------------------
rev :每行的行数不变,但是把每行内容全部倒过来显示
第一行还是第一行,但是第一行的内容反过来
----------------------------------------
more:分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
例:ls -R /etc/ | more ,它翻到最后就退出了
----------------------------------------
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 :搜索 文本
n/N :跳到下一个 或 上一个匹配
less命令是man命令使用的分页器
例:ls -R /etc/ | less ,它可以上下翻页,用q退出
----------------------------------------
head [OPTION]... [FILE]...
-c # 指定获取前#字节
-n # 指定获取前#行
例:cat -n /etc/passwd | head -n 5
- 注:head后面不加选项的话默认是显示前10行
----------------------------------------
tail [OPTION]... [FILE]...
-c # 指定获取后#字节
-n # 指定获取后#行 (也可以缩写为 -# ,省略n只输入行数)
-f 跟踪显示文件fd新追加的内容,常用日志监控
相当于 --follow=descriptor
-F 跟踪文件名
相当于--follow=name --retry
- 注1:tail后面不加选项的话默认是显示后10行
- 注2:-f选项,如果文件被删除掉,如果再创建同名的文件(fd基本上不会相同),修改新的文件内容对它是没有影响的,因为它跟踪的是fd,仍然指向的是旧的文件的数据块的位置
- 注3:-F选项,如果文件被删除掉,如果再创建同名的新的文件,修改新的文件内容它会继续输出显示;因为虽然不是同一个文件但文件名字一样,相当于对新的文件重新进行了它数据块的指向,并显示新的数据块中的内容
----------------------------------------
tailf 类似tail –f,当文件不增长时并不访问文件
- 想要取中间的行可以先head再tail
2. 按列抽取文本—{cut}
- cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c character :
按字符切割,使用规则同上面的fields
--output-delimiter=STRING指定输出分隔符
例子:
----------------------------------------
# df |tr -s " " |cut -d" " -f5|tr -d "%"
# df |tr -s " " |cut -d" " -f5|cut -d% -f1
# df |tr -s " " "%"|cut -d% -f5
上面三个结果都是:
Use
4
0
0
2
0
1
18
1
100
---------------------------------------
14:35[root@centos7 /data]# ifconfig|head -2|tail -1|tr -s " "|cut -d" " -f3
192.168.36.102
---------------------------------------
例子:显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
3. 横向合并:合并两个文件同行号的行到一行—{paste}
说明:按照文件file在paste后面所写的顺序,各个文件的相同的每一行合并成同一行,中间添加一个tab(一个tab的空格长度)分隔,并输出到标准输出中(可以重定向到文件里面去)
paste [OPTION]... [FILE]...
-d 分隔符 :指定分隔符,默认用TAB
-s :
先把后面的每一个单独的file文件的内容中的所有行合成一行;
然后在把这些文件按照file所写的顺序,将每个文件的内容一行一行的显示出来(按照前后顺序),有多少文件合并后也就有多少行
示例:
paste f1 f2 f3...
paste -s f1 f2...
3.1. 纵向合并:直接用cat命令就可以
比如: cat f1 f2 f3...
这就对文件进行了纵向合并,非常简单;然后可以把结果重定向输出到一个文件中去
4. 收集文本统计数据—{wc}
- 计数单词总数、行总数、字节总数和字符总数
- 可以对文件或STDIN中的数据运行
例如:
# cat -A wc.txt
123$
feawg$
aa$
# ll wc.txt
-rw-r--r-- 1 root root 13 Nov 26 01:01 wc.txt
# wc wc.txt
3 3 13 wc.txt
行数 字(单词)数 字节byte数(代表大小) 文件名
常用选项:
-l 只计数 行数
-w 只计数 单词总数
-c 只计数 字节总数
-m 只计数 字符总数
-L 显示文件中最长行的长度
例如:
1.查看多少用户 wc -l /etc/passwd
2.查看多少用户登陆 who|wc -l
5. 文本排序—{sort}
- 把整理过的文本显示在STDOUT,不改变原始文件
- 注:sort本身也是标准输入,不加选项会让你键盘输入字符,然后ctrl+d就开始排序.
sort [options]... file...
常用选项
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理(注意如果不加-n,则默认按照从左往右的数字字符排序)
-f 忽略(fold)字符串中的字符大小写
-u (独特,unique),删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理,能够使用多次
例子:
1. 将用户按照UID从小到大排序
sort -n -t: -k3 /etc/passwd
2. 查看最大的磁盘占用率是多少
df | tr -s " " "%"|cut -d% -f5|sort -nr |head -1
3.取1到94中间的随机数
seq 94 |sort -R |head -1
或者echo {1..94} |tr " " "\n"|sort -R |head -1
6. uniq
- 注意uniq也是一个带标准输入的命令
- uniq命令:从输入中删除前后相接的(也就是连续的)重复的行,注意不连续的不删除
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示相邻的重复过的行,同时显示结果去掉重复的只保留一行
-u: 仅显示相邻的不曾重复的行
注:连续且完全相同方为重复
常和sort 命令一起配合使用,用于统计同一个用户出现的次数等等:
sort userlist.txt | uniq -c
参数举例:
# cat uniq.txt
a
a
b
c
d
d
a
d
d
c
# uniq uniq.txt
a
b
c
d
a
d
c
# uniq -d uniq.txt
a
d
d
# uniq -u uniq.txt
b
c
a
c
例如:统计网站访问日志中(以IP地址开头的)同一个用户的访问次数,并按照从多到少的次序排序:
15:05[root@centos7 /data]# sort access_log |cut -d"-" -f1| uniq -c| sort -nr |head
4870 172.20.116.228
3429 172.20.116.208
2834 172.20.0.222
2613 172.20.112.14
2267 172.20.0.227
2262 172.20.116.179
2259 172.20.65.65
1565 172.20.0.76
1482 172.20.0.200
1110 172.20.28.145
问:给你两个文本文件f1,f2,分析两个文本文件中相同的行和不同的行.
答:sort f1 |uniq >f1b 或 sort -u f1 | >f1b
sort f2 |uniq >f2b 或 sort -u f2 | >f2b
cat f1b f2b |sort |uniq -u : 不同的行
cat f1b f2b |sort |uniq -d :相同的行
统计远程连接到本机的IP数
ss -nt :显示当前远程连接的主机IP和端口号
ss -nt |tr -s " " ":" |cut -d: -f6 |sort|uniq -c |sort -rn
7. 比较两个文件区别—{diff,patch}
- diff 命令的输出被保存在一种叫做“补丁”的文件中
- 使用 -u 选项来输出“统一的(unified)” diff格式文件,最适用于补丁文件
- patch 复制在其它文件中进行的改变(要谨慎使用)
- 适用 -b 选项来自动备份改变了的文件
diff -u foo.conf foo2.conf > foo.patch :对于foo做哪些改变能成为foo2保存到foo.patch中
patch -b foo.conf foo.patch :对foo文件先做备份,然后对foo文件进行操作,把它变成foo2文件
留言