9.文本处理工具

Posted 永远的红茶加白地兰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
     1  bc
     2  aad
     3  fff
     4  qwq
     5  fg
     6  opq
     7  gk
     8  gkqlb
     9  vql
    10  fqf
    11  p-
    12  kq0

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.159  netmask 255.255.255.0  broadcast 10.0.0.255
//再用tail命令取最后一行,就把第二行取回来了
[root@rocky ~]# ifconfig ens33|head -n2|tail -n1
        inet 10.0.0.159  netmask 255.255.255.0  broadcast 10.0.0.255

Case2:

//先用tail -n +2命令,从第二行开始往后输出
[root@rocky ~]# ifconfig ens33|tail -n +2
        inet 10.0.0.159  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fea3:340c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a3:34:0c  txqueuelen 1000  (Ethernet)
        RX packets 3163  bytes 364729 (356.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2043  bytes 162856 (159.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

//然后再用head命令取第一行
[root@rocky ~]# ifconfig ens33|tail -n +2|head -n1
        inet 10.0.0.159  netmask 255.255.255.0  broadcast 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.159 netmask 255.255.255.0 broadcast 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
devtmpfs               968548       0    968548   0
tmpfs                  998884       0    998884   0
tmpfs                  998884    9548    989336   1
tmpfs                  998884       0    998884   0
/dev/mapper/rl-root  73364480 5287888  68076592   8
/dev/mapper/rl-home 133067284  975168 132092116   1
/dev/sda1             1038336  231472    806864  23
tmpfs                  199776    1180    198596   1
tmpfs                  199776       0    199776   0
//然后用rev按行反向输出
[root@rocky ~]# df |tail -n+2|cut -d% -f1|rev
0   845869    0       845869               sfpmtved
0   488899    0       488899                  sfpmt
1   633989    8459    488899                  sfpmt
0   488899    0       488899                  sfpmt
8   29567086  8887825 08446337  toor-lr/reppam/ved/
1   611290231 861579  482760331 emoh-lr/reppam/ved/
32  468608    274132  6338301             1ads/ved/
1   695891    0811    677991                  sfpmt
0   677991    0       677991                  sfpmt

最后以空格为分隔符cut剪掉第一列得到使用率。

[root@rocky ~]# df |tail -n+2|cut -d% -f1|rev|cut -d\' \' -f1
0
0
1
0
8
1
32
1
0

以上是关于9.文本处理工具的主要内容,如果未能解决你的问题,请参考以下文章

9 处理文本的工具sed

9.文本处理工具

打开键盘隐藏片段下方的工具栏

9.4-9.5 sed工具

9.6-9.7 awk工具

源代码管理工具GitHub介绍