大道之行,天下为公。这篇文章主要讲述9.文本处理工具相关的知识,希望能为你提供帮助。
1.cat命令
命令格式
cat 选项 文件
-E:显示行结束符$
-A:显示所有控制符
-n:对显示出的每一行进行编号
-b:非空行编号
-s:压缩连续的空行成一行
记:cat -A 显示所有控制符($ 换行符)
[root@rocky ~]# cat -A 11.txt
$
\'d,a$
f,asf$
,f,$
af,$
\'af,a$
,f,$
f,a,$
fad$
a,$
f$
iiii$
ad$
a.sd.$
;
dadzzzzzZZZZZZ$
wd$
M-oM-<
M-^ZM-oM-<
M-^Zi$
ZZ$
$
2.nl命令(显示行号)
相当于cat -b
[root@rocky ~]# nl test.txt
1bc
2aad
3fff
4qwq
5fg
6opq
7gk
8gkqlb
9vql
10fqf
11p-
12kq0
3.tac命令(逆向显示文本内容)
//cat的正向显示
[root@rocky ~]# cat 1.txt
1
2
3
4
5
6
//使用tac逆向显示
[root@rocky ~]# tac 1.txt
6
5
4
3
2
4.rev(将同一行的内容逆向显示)
//使用cat正向显示
[root@rocky ~]# cat 2.txt
12
35
562
6653
22333
//使用rev逆向显示同行内容
[root@rocky ~]# rev 2.txt
21
53
265
3566
33322
5.head ,tail 命令
//head命令从头开始查看,tail命令从尾部开始查看
命令格式
head 参数 文件
-q 隐藏文件名
-v 显示文件名
-c<
数目>
显示的字节数。
-n<
行数>
显示的行数。
tail 参数 文件
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件
-q 不显示处理信息
-v 显示详细的处理信息
-c<
数目>
指定获取后的字节
-n<
行数>
显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
例1:查看ens33网卡名称,把第二行取出来
Case1:
//先用head把网卡前2行取回来
[root@rocky ~]# ifconfig ens33|head -n2
ens33: flags=4163<
UP,BROADCAST,RUNNING,MULTICAST>
mtu 1500
inet 10.0.0.159netmask 255.255.255.0broadcast 10.0.0.255
//再用tail命令取最后一行,就把第二行取回来了
[root@rocky ~]# ifconfig ens33|head -n2|tail -n1
inet 10.0.0.159netmask 255.255.255.0broadcast 10.0.0.255
Case2:
//先用tail -n +2命令,从第二行开始往后输出
[root@rocky ~]# ifconfig ens33|tail -n +2
inet 10.0.0.159netmask 255.255.255.0broadcast 10.0.0.255
inet6 fe80::20c:29ff:fea3:340cprefixlen 64scopeid 0x20<
link>
ether 00:0c:29:a3:34:0ctxqueuelen 1000(Ethernet)
RX packets 3163bytes 364729 (356.1 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 2043bytes 162856 (159.0 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0//然后再用head命令取第一行
[root@rocky ~]# ifconfig ens33|tail -n +2|head -n1
inet 10.0.0.159netmask 255.255.255.0broadcast 10.0.0.255
6.cut命令(按列抽取文本cut)
命令格式:
cut 选项 文件
常用选项
-d:指明分隔符,默认tab
-f:与-d一起使用,指定显示哪个区域。第3个字段,就是3;
如果要多个字段,可以1,3,6;
如果连续多个字段 1-6;混合使用1-3,7列
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
例:使用cut命令取出ens33网卡的ip地址
//先进行行挑选,用tail命令从第二行开始输出,然后用head命令取第一行
[root@rocky ~]# ifconfig ens33|tail -n +2|head -n1
inet 10.0.0.159netmask 255.255.255.0broadcast 10.0.0.255
//使用cut命令以空格为分隔符输出ip地址
分隔符必须加引号\' \'
root@rocky ~]# ifconfig ens33|tail -n +2|head -n1|cut -d\' \' -f 10
10.0.0.159
例2:cut得到分区使用率
//先tail命令从第二行开始取,然后用cut以%为分割符取得前面的
[root@rocky ~]# df |tail -n+2|cut -d% -f1
devtmpfs96854809685480
tmpfs99888409988840
tmpfs99888495489893361
tmpfs99888409988840
/dev/mapper/rl-root73364480 5287888680765928
/dev/mapper/rl-home 133067284975168 1320921161
/dev/sda1103833623147280686423
tmpfs19977611801985961
tmpfs19977601997760
//然后用rev按行反向输出
[root@rocky ~]# df |tail -n+2|cut -d% -f1|rev
08458690845869sfpmtved
04888990488899sfpmt
16339898459488899sfpmt
04888990488899sfpmt
8295670868887825 08446337toor-lr/reppam/ved/
1611290231 861579482760331 emoh-lr/reppam/ved/
3246860827413263383011ads/ved/
16958910811677991sfpmt
06779910677991sfpmt
【9.文本处理工具】最后以空格为分隔符cut剪掉第一列得到使用率。
[root@rocky ~]# df |tail -n+2|cut -d% -f1|rev|cut -d\' \' -f1
0
0
1
0
8
1
32
1
0
推荐阅读
- BPF BTF 详细介绍
- Spring Cloud Gateway 没有链路信息,我 TM 人傻了(上)
- 1.docker概述及其历史
- 云计算奇妙学习之旅第四期(华为计算虚拟化精讲)
- linux之systemctl命令
- 项目中Spring事务失效的场景问题排查
- mysql 查看用户的权限
- 树莓派安装JDK1.8并配置环境变量
- 数据仓库之数据质量建设(深度好文)