5个常用文本处理命令
1.head
2.tail
3.grep
4.sed
5.awk

1. head

语法: head -n *** file
顾名思义,中文意思就是头部的意思, 它的用法就是按顺序查看或过滤文本的
比如我用cat -n chunxiao.txt命令查看文件的内容是这样的, -n是什么意思呢, n就是number的缩写, number,数字
[root@centos7 chunxiao]# cat -n chunxiao.txt 
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf
     6	drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 root root 1551 Mar 12  2019 system.conf
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf
这里面有9行内容, 如果我只想看前面的5行, 后面的不要显示它, 这个时候就是用下面的命令
cat -n chunxiao.txt | head -n 5

eg.

[root@centos7 chunxiao]# cat -n chunxiao.txt | head -n 5
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf

详细说明,这里用到了管道符 | ,管道符的作用就是交接, 就是用cat -n chunxiao.txt查看出来文件的全部内容, 然后用管道符把这个全部的内容传输给了后面的head去处理过滤。其实还有一条命令更加简洁:head -n 5 chunxiao.txt

实现的效果是一样的, 请看下面
[root@centos7 chunxiao]# head -n 5 chunxiao.txt 
total 32
-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf

看, 也是把前面5行的内容拿出来了, 只不过没显示行号而已, 要显示行号呢, 可以先用cat 再用head 就像上面用管道符那样。

2.tail

语法1: tail -n ** file
语法2: tail -f file
tail,尾部的意思, 就是倒数去读取,它应该怎么去实现呢,现在我们已经知道chunxiao.txt这个文件下面的所有的内容了, 是长这个样子的, 是吧小白
[root@centos7 chunxiao]# cat -n chunxiao.txt 
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf
     6	drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 root root 1551 Mar 12  2019 system.conf
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf

那么, 我想就取文件的第8和第9行(换句话说就是取倒数开始的两行)

那么命令就是

cat -n chunxiao.txt | tail -n 2

查询出来的结果就是这样的

[root@centos7 chunxiao]# cat -n chunxiao.txt | tail -n 2
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf

呐, 用tail -n 2 chunxiao.txt也是可以达到同样效果的哈

还有一个比较常用的是-f参数, 这个到时候我们再说。

下面就到文本的三剑客了

文本三剑客(grep,sed,awk)

3.grep

语法: grep “****” file
这个你已经认识的了,在查询进程或者是查询端口的时候, 不知道你是否还记得,傻孩子
它的作用很简单, 常用的就是过滤与反过滤,下面我再用chunxiao.txt这个文件演示
现在我们很清楚chunxiao.txt下面的内容是什么了
[root@centos7 chunxiao]# cat -n chunxiao.txt
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf
     6	drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 root root 1551 Mar 12  2019 system.conf
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf

如果,我只想要显示关于”system”这个字眼的

cat -n chunxiao.txt | grep "system"
eg.
[root@centos7 chunxiao]# cat -n chunxiao.txt | grep "system"
     6	drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 root root 1551 Mar 12  2019 system.conf

它就会单独给我们列出两行出来

如果, 我想让他不显示关于”system”字眼的

cat -n chunxiao.txt | grep -v "system"

eg.

[root@centos7 chunxiao]# cat -n chunxiao.txt | grep -v "system"
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf

它就排除了有关”system”字眼的行

4.sed

语法1: sed ‘s/原来的/更新后/g’ file
语法2: sed -i ‘s///’ file
(就是把”原来的”替换成了”更新后”, g代表所有, 所有都替换, 如果只需要替换第一行, 那就把g去掉, 就是 sed ‘s/***/***/’)
sed, sed最大的能力在于替换, 就是把1替换成2,类似于update(更新)吧
还是以chunxiao.txt这个文件来说, 让你加强记忆
[root@centos7 chunxiao]# cat -n chunxiao.txt
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf
     6	drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 root root 1551 Mar 12  2019 system.conf
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf

文件的内容已经看了很多遍了,你看第二行最后的那个名字是叫”bootchart.conf”, 现在我要把它变成zhenghua.conf

cat -n chunxiao.txt | sed 's/bootchart.conf/zhenghua.conf/g'

eg.

[root@centos7 chunxiao]# cat -n chunxiao.txt | sed 's/bootchart.conf/zhenghua.conf/g'
     1	total 32
     2	-rw-r--r--   1 root root  720 Jul 31 16:15 zhenghua.conf
     3	-rw-r--r--   1 root root  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 root root  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 root root  957 Jul 31 16:15 logind.conf
     6	drwxr-xr-x. 12 root root 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 root root 1551 Mar 12  2019 system.conf
     8	drwxr-xr-x.  2 root root 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 root root 1127 Jul 31 16:15 user.conf

你看, 是不是变化了

再来一个增强记忆, 你看第4和第5列, 是不是都是显示”root”, 那么我们把它显示为xiaobai

cat -n chunxiao.txt | sed 's/root/xiaobai/g'

eg.

[root@centos7 chunxiao]# cat -n chunxiao.txt | sed 's/root/xiaobai/g'
     1	total 32
     2	-rw-r--r--   1 xiaobai xiaobai  720 Jul 31 16:15 bootchart.conf
     3	-rw-r--r--   1 xiaobai xiaobai  615 Jul 31 16:15 coredump.conf
     4	-rw-r--r--   1 xiaobai xiaobai  983 Jul 31 16:15 journald.conf
     5	-rw-r--r--   1 xiaobai xiaobai  957 Jul 31 16:15 logind.conf
     6	drwxr-xr-x. 12 xiaobai xiaobai 4096 Jul 31 16:15 system
     7	-rw-r--r--   1 xiaobai xiaobai 1551 Mar 12  2019 system.conf
     8	drwxr-xr-x.  2 xiaobai xiaobai 4096 Jul 31 16:15 user
     9	-rw-r--r--   1 xiaobai xiaobai 1127 Jul 31 16:15 user.conf

已经发生了变化

5.awk

语法1:awk ‘{print$n}’  n:数字
语法2:awk -F ‘*’ ‘{print$n}’  n:数字,  -F’*’ 分隔符
awk, 按列筛选, 这个我比较常用
还是以chunxiao.txt这个文件来说哈

 

 请看, 现在里面有9列, 是吧

那么我只想把第8列显示出来

cat chunxiao.txt | awk '{print$8}'

eg.

[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$8}'

16:15
16:15
16:15
16:15
16:15
2019
16:15
16:15

呐, 是这个样子的

如果我想看第9列呢

[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$9}'

bootchart.conf
coredump.conf
journald.conf
logind.conf
system
system.conf
user
user.conf

如果我只想看最后一列呢

[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$NF}'
32
bootchart.conf
coredump.conf
journald.conf
logind.conf
system
system.conf
user
user.conf

如果我想把第8和第9列都显示呢

[root@centos7 chunxiao]# cat chunxiao.txt | awk '{print$8,$9}'
 
16:15 bootchart.conf
16:15 coredump.conf
16:15 journald.conf
16:15 logind.conf
16:15 system
2019 system.conf
16:15 user
16:15 user.conf

  

 

 

 

 

 

 
好了, 完毕, 那5个语法一定要记下来, 写进你的记事本。
 
 

版权声明:本文为chenglee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chenglee/p/11855437.html