内容
隐藏
文本常见处理工具
1、文件内容查看命令
1.1 查看文本文件内容
1.1.1 cat
cat 可以查看文本内容
格式:
cat [OPTION]... [FILE]...
常见选项
-E:显示行结束符$
-A:显示所有控制符
-n:对显示出的每一行进行编号
-b:非空行编号
-s:压缩连续的空行成一行
1.1.2 nl
显示行号,相当于cat -b
1.1.3 tac
逆向显示文本内容
1.1.4 rev
将同一行的内容逆向显示
1.2 查看非文本文件内容
1.2.1 hexdump
[root@centos7blog ~]# echo {a..z} | tr -d ' '| hexdump -C
00000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 |abcdefghijklmnop|
00000010 71 72 73 74 75 76 77 78 79 7a 0a |qrstuvwxyz.|
0000001b
[root@centos7blog ~]# hexdump -C -n 512 /dev/sda
00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|
00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|
00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c |. ..d|<.t...R..||
00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u|
000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..|
000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\|f.\.f|
000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\..D..p.B.|
000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.|
000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....|
000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........|
00000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 |.@.D.......f..f.|
00000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 |`|f..uNf.\|f1.f.|
00000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 |4..1.f.t.;D.}7..|
00000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 |..0........Z....|
00000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e |p..1......r...`.|
00000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f |.....1..........|
00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.|
00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .|
00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R|
00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......|
000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........|
000001b0 00 00 00 00 00 00 00 00 c2 83 0a 00 00 00 80 20 |............... |
000001c0 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa |!...(....... ...|
000001d0 29 82 8e fe ff ff 00 08 20 00 00 f8 5f 02 00 00 |)....... ..._...|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
1.2.2 od
od 即 dump files in octal and other formats
[root@centos7blog ~]# echo {a..z} | tr -d ' '| od -t x
0000000 64636261 68676665 6c6b6a69 706f6e6d
0000020 74737271 78777675 000a7a79
0000033
[root@centos7blog ~]# echo {a..z} | tr -d ' '| od -t x1
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70
0000020 71 72 73 74 75 76 77 78 79 7a 0a
0000033
[root@centos7blog ~]# echo {a..z} | tr -d ' '| od -t x1z
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 >abcdefghijklmnop<
0000020 71 72 73 74 75 76 77 78 79 7a 0a >qrstuvwxyz.<
0000033
1.2.3 xxd
[root@centos7blog ~]# echo {a..z} | tr -d ' '| xxd
0000000: 6162 6364 6566 6768 696a 6b6c 6d6e 6f70 abcdefghijklmnop
0000010: 7172 7374 7576 7778 797a 0a qrstuvwxyz.
2、分页查看文件内容
2.1 more
可以实现分页查看文件,可以配合管道实现输出信息的分页
格式
more [OPTIONS...] FILE...
选项:
-d: 显示翻页及退出提示
2.2 less
less 也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
3、显示文本前或后行内容
3.1 head
可以显示文件或标准输入的前面行
格式:
head [OPTION]... [FILE]...
选项:
-c # 指定获取前#字节
-n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
-# 同上
[root@centos7blog ~]# head -n 3 /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
3.2 tail
tail 和head 相反,查看文件或标准输入的倒数行
格式:
tail [OPTION]... [FILE]...
常用选项:
-c # 指定获取后#字节
-n # 指定获取后#行,如果#是负数,表示从第#行开始到文件结束
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件
tailf 类似 tail –f,当文件不增长时并不访问文件,节约资源,CentOS8无此工具
[root@centos7blog ~]# tail -5 /var/log/messages
Dec 27 20:06:17 zabbix-web-server2 systemd-logind: Removed session 1.
Dec 27 20:06:17 zabbix-web-server2 systemd: Removed slice User Slice of root.
Dec 27 20:06:19 zabbix-web-server2 systemd: Created slice User Slice of root.
Dec 27 20:06:19 zabbix-web-server2 systemd: Started Session 4 of user root.
Dec 27 20:06:19 zabbix-web-server2 systemd-logind: New session 4 of user root.
#只查看最新发生的日志
[root@centos7blog ~]#tail -fn0 /var/log/messages
[root@centos7blog ~]#tail -0f /var/log/messages
#显示从第二行开始通过(-n +2)
[root@centos7blog ~]# df|tr -s ' ' | cut -d' ' -f5 | tr -d % | tail -n +2
0
0
2
0
10
14
0
[root@centos7blog ~]# df|tr -s ' ' | cut -d' ' -f5 | tr -d % | tail -n -2
14
0
[root@centos7blog ~]# df|tr -s ' ' | cut -d' ' -f5 | tr -d % | tail -n 2
14
0
3.3head+tail
指定显示某一行
[root@centos7blog ~]# seq 33 | head -6 | tail -1
6
#取IP行(没啥用,一般都是通过awk)
[root@centos7blog ~]# ifconfig | head -2 | tail -1
inet 10.0.0.40 netmask 255.255.255.0 broadcast 10.0.0.255
4、按列抽取文本cut
cut 命令可以提取文本文件或STDIN数据的指定列
格式
cut [OPTION]... [FILE]...
常用选项
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段,例如:3
#,#[,#]: 离散的多个字段,例如:1,3,6
#-#: 连续的多个字段, 例如:1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
[root@centos7blog ~]# cut -d: -f3-5,7 /etc/passwd | head -2
0:0:root:/bin/bash
1:1:bin:/sbin/nologin
[root@centos7blog ~]# cat /etc/passwd | head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#取分区利用率
[root@centos7blog ~]# df|tr -s ' ' | cut -d' ' -f5 | tr -d % | tail -n +2
[root@centos7blog ~]# df|tr -s ' ' '%'|cut -d% -f5 | tail -n +2
5、合并多个文件 paste
paste 合并多个文件同行号的列到一行
格式
paste [OPTION]... [FILE]...
常用选项:
-d #分隔符:指定分隔符,默认用TAB
-s #所有行合成一行显示
6、分析文本的工具
文本数据统计:wc
整理文本:sort
比较文件:diff和patch
6.1 收集文本统计数据 wc
wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数
可以对文件或STDIN中的数据统计
常用选项
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度
6.2 文本排序 sort
把整理过的文本显示在STDOUT,不改变原始文件
格式:
sort [options] file(s)
常用选项
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序,如: 2K 1G
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique),合并重复项,即去重
-t @ 选项使用@做为字段界定符
-k ¥ 选项按照使用@字符分隔的¥列来整理能够使用多次
[root@centos7blog ~]# cat a.txt
200
100
34556
23
[root@centos7blog ~]# cat b.txt
123
43
200
3321
#合并显示并且去重
[root@centos7blog ~]# cat a.txt b.txt | sort -nu
23
43
100
123
200
3321
34556
6.3 去重uniq
uniq命令从输入中删除前后相接的重复的行
格式:
uniq [OPTION]... [FILE]...
常见选项:
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
uniq常和sort 命令一起配合使用:
#并发连接最多的远程主机IP
[root@centos7blog ~]# ss -nt | tail -n+2 | tr -s ' ' : | cut -d: -f6 | sort | uniq -c | sort -nr
1 10.0.0.254
#取文件的共同行
[root@centos7blog ~]# cat a.txt b.txt | sort | uniq -d
200
#取文件的不同行
[root@centos7blog ~]# cat a.txt b.txt | sort | uniq -u
100
123
23
3321
34556
43
6.4 比较文件
6.4.1 diff
diff 命令比较两个文件之间的区别
-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
[root@centos7blog ~]# diff a.txt b.txt
0a1,2
> 123
> 43
2,4c4
< 100
< 34556
< 23
---
> 3321
[root@centos7blog ~]# diff -u a.txt b.txt
--- a.txt 2021-12-27 23:16:12.023382348 +0800
+++ b.txt 2021-12-27 23:16:26.605382679 +0800
@@ -1,4 +1,4 @@
+123
+43
200
-100
-34556
-23
+3321
6.4.2 patch
patch 复制在其它文件中进行的改变(要谨慎使用)
-b 选项来自动备份改变了的文件
[root@centos7blog ~]# diff -u a.txt b.txt > c.txt
[root@centos7blog ~]# cat c.txt
--- a.txt 2021-12-27 23:16:12.023382348 +0800
+++ b.txt 2021-12-27 23:16:26.605382679 +0800
@@ -1,4 +1,4 @@
+123
+43
200
-100
-34556
-23
+3321
[root@centos7blog ~]# patch -b c.txt a.txt
patch: **** Only garbage was found in the patch input.
6.4.3 vimdiff
相当于 vim -d
[root@centos7blog ~]# vimdiff a.txt b.txt
2 files to edit
------------------------------------------------| 123
------------------------------------------------| 43
200 | 200
100 | 3321
34556 | -----------------------------------------------
23 | -----------------------------------------------
6.4.4 cmp
[root@centos7blog ~]# ll /usr/bin/dir /usr/bin/ls
-rwxr-xr-x. 1 root root 117608 Aug 20 2019 /usr/bin/dir
-rwxr-xr-x. 1 root root 117608 Aug 20 2019 /usr/bin/ls
[root@centos7blog ~]# diff /usr/bin/dir /usr/bin/ls
Binary files /usr/bin/dir and /usr/bin/ls differ
[root@centos7blog ~]# cmp /bin/dir /bin/ls
/bin/dir /bin/ls differ: byte 645, line 1
6.5练习
1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
[root@centos7blog ~]# ifconfig | head -2 | tail -1 | tr -s ' ' | cut -d' ' -f3
10.0.0.40
2、查出分区空间使用率的最大百分比值
[root@centos7blog ~]# df | tail -n +2 | tr -s ' ' | cut -d' ' -f5 | cut -d'%' -f1 | sort -nru | head -1
14
3、查出用户UID最大值的用户名、UID及shell类型
[root@centos7blog ~]# sort -t: -n -k3 -r /etc/passwd | head -1 |cut -d':' -f1,3,7
nfsnobody:65534:/sbin/nologin
4、查出/tmp的权限,以数字方式显示
[root@centos7blog ~]# stat /tmp | grep -oE '^A.*\([0-9]{4}' | cut -d '(' -f 2
1777
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
[root@centos7blog ~]# ss -nt | tail -n+2 | tr -s ' ' | cut -d' ' -f 5 | cut -d: -f1 | sort -nr | uniq -c