Linux入门真经-017管道与一些文本处理工具
1
1、管道功能简述
在linux中,每一个命令的程序功能都比较单一纯净,我们常常需要使用多个命令去完成某一个工作。当我们需要将前一个命令的输出作为后一个命令的输入的时候,重定向可以完成这一工作,但是显得比较笨拙。因此出现了管道这一工具。
管道的作用就是:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流。
管道用符号|表示,命令之间用管道符分隔开,形如:
COMMAND1 | COMMAND2 | COMMAND3 | ...
提到管道不得不提一下grep。它是一个文本搜索、过滤工具,可以根据关键字过滤信息,经常结合正则表达式工作,功能强大(正则表达式和常用选项我们很快会在后续的章节中专门介绍,今天grep只是先露个脸)
接下来介绍一些文本处理的命令,同时掺杂管道的使用,帮助你掌握管道这一特性。
2、wc命令:常用于统计
wc:word count(字符统计)
wc [OPTION]... [FILE]...
常用OPTION:
-l:lines (出现行数统计)
-w:words(单词出现数统计)
-c:bytes (文件大小)
比如说,我现在想知道这台机器有几个up的网卡,我可以:
[[email protected] tmp]# ip a | grep UP | wc-l
2
你暂时也无需纠结ip是什么,UP是什么含义,只需要知道wc的功能即可。在此处,IP命令的输出通过管道传递给了grep命令。grep过滤出包含UP的行,并把结果通过管道传递给wc,wc再统计出现的行。我们可以看看ip a和ip a | grep UP的初始输出,帮助你理解:
[[email protected] tmp]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UPgroup default qlen 1000
link/ether 00:0c:29:74:95:c8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe74:95c8/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
[[email protected] tmp]# ip a | grep UP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UPgroup default qlen 1000
3、cut:切割文本内容
cut可以按照某种分隔符对文本中的内容进行切割。
cut OPTION... [FILE]...
OPTION:
-d CHAR:以指定的字符为分隔符;
-f FIELDS:挑选出的字段;
#:指定的第#个字段;
#1-#2:连续的多个字段,第#1个到第#2个字段;
#,#,#:离散的多个字段;
和下文的sort一起举例
4、sort:排序
sort [OPTION]... [FILE]...
-n:基于数值大小而非字符进行排序;
-tCHAR:指定分隔符;
-k#:#为数字用于排序比较的字段;
-r:逆序排序;
-f:忽略字符大小写
-u:重复的行只保留一份;
举例:
/etc/passwd中的每一行文本都是有特定格式的,买一行代表着一个用户的信息(具体含义会在介绍用户与组时详谈):
[[email protected] tmp]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
其中,以冒号分隔的第三个段代表的是用户的id号,如上面这一行是root的相关信息,root的id号是0
我们过滤出现了root字样的行,根据用户的ID号逆序输出
[[email protected] tmp]# cat /etc/passwd |grep root | sort -t: -k3 -r
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[[email protected] tmp]#
用cut获取这些用户的用户ID:
[[email protected] tmp]# cat /etc/passwd |grep root | sort -t: -k3 -r | cut -d: -f3
11
0
本节先介绍这些内容,管道符在我们的日常学习或者工作中会经常用到,希望读者能够理解,本节列举的例子也希望大家可以在虚拟机中进行练习。
关注本公众号获取每日更新