Linux入门真经-017管道与一些文本处理工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/syaziou/article/details/81869290

1

1、管道功能简述

 

在linux中,每一个命令的程序功能都比较单一纯净,我们常常需要使用多个命令去完成某一个工作。当我们需要将前一个命令的输出作为后一个命令的输入的时候,重定向可以完成这一工作,但是显得比较笨拙。因此出现了管道这一工具。

管道的作用就是:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流。

管道用符号|表示,命令之间用管道符分隔开,形如:

COMMAND1 | COMMAND2 | COMMAND3 | ...

提到管道不得不提一下grep。它是一个文本搜索、过滤工具,可以根据关键字过滤信息,经常结合正则表达式工作,功能强大(正则表达式和常用选项我们很快会在后续的章节中专门介绍,今天grep只是先露个脸)

接下来介绍一些文本处理的命令,同时掺杂管道的使用,帮助你掌握管道这一特性。

 

2、wc命令:常用于统计

 

wc:word count(字符统计)

wc [OPTION]...  [FILE]...

常用OPTION:

         -l:lines  (出现行数统计)

         -w:words(单词出现数统计)

         -c:bytes  (文件大小)

比如说,我现在想知道这台机器有几个up的网卡,我可以:

 

[root@localhost tmp]# ip a | grep UP | wc-l

2

 

你暂时也无需纠结ip是什么,UP是什么含义,只需要知道wc的功能即可。在此处,IP命令的输出通过管道传递给了grep命令。grep过滤出包含UP的行,并把结果通过管道传递给wc,wc再统计出现的行。我们可以看看ip a和ip a | grep UP的初始输出,帮助你理解:

 

[root@localhost 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

[root@localhost 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中的每一行文本都是有特定格式的,买一行代表着一个用户的信息(具体含义会在介绍用户与组时详谈):

 

[root@localhost tmp]# head -1 /etc/passwd

root:x:0:0:root:/root:/bin/bash

 

其中,以冒号分隔的第三个段代表的是用户的id号,如上面这一行是root的相关信息,root的id号是0

我们过滤出现了root字样的行,根据用户的ID号逆序输出

 

[root@localhost 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

[root@localhost tmp]#

 

用cut获取这些用户的用户ID:

 

[root@localhost tmp]# cat /etc/passwd |grep root | sort -t: -k3 -r | cut -d: -f3

11

0

 

本节先介绍这些内容,管道符在我们的日常学习或者工作中会经常用到,希望读者能够理解,本节列举的例子也希望大家可以在虚拟机中进行练习。


关注本公众号获取每日更新

猜你喜欢

转载自blog.csdn.net/syaziou/article/details/81869290