综合案例分析(sort,cut,正则)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了综合案例分析(sort,cut,正则)相关的知识,希望对你有一定的参考价值。

1、    找出ifconfig “网卡名” 命令结果中本机IPv4地址

分析:

技术分享

解释:要取出ip地址,首先我们可以先取出ip所在的行,即取行;可以结合head和tail,后面会有

更好的方法去取行,取列当然会想到cut命令,但是此例中,我们要考虑分隔符(空格和冒号),

因此tr的引入,会使题目变得更加简单。

答:

技术分享

在这里小编仅提供一种比较好的方法。

2.查出分区空间使用率的最大百分比值

分析:

技术分享

 

 

解释;先附上一张df查看的结果,比较容易解释

技术分享

首先我们可以用df查看分区,很明显我们需要的是第5列,自然而然会考虑使用cut命令,但是第一列和第二列

中间的空格长度不一,我们利用以往的经验会使用tr这个命令,可以将空格压缩,而且还能转化为自己想要的

间隔符那么接下来就是排序了。

答:

技术分享

这样就很容易知道分区的最大利用率了。

3.查出用户UID最大值的用户名、UID及shell类型

分析:

技术分享

 

 

解释:首先取出文件/etc/passwd中含有用户名.UID.以及shell类型的列,不难记忆,分别是1,3,7这三列,

我们可以用cut命令将这三列取出,然后根据sort的功能,根据uid大小排序,这也是比较容易的。

答:

技术分享

需要区分cut和sort的分隔符,cut的是 -d -f sort的是-t -k。

4.查出/tmp的权限,以数字方式显示

分析:

技术分享

 

 

解释:说到权限,最容易想到的自然是使用ls命令,很容查看到文件的权限,当然查看到的是用字符表示的,

和题意是不符的,我们可能会想对字符做一个转化,但是以目前接触到的命令,还是无法解决,那么有没有

更简单的方法,直接截取到数字表示的权限。还记得我们如何查看atime.mtime以及ctime,使用的是

stat这个命令,使用它也可以查看到数字表示的权限哦。

技术分享

答:

技术分享

知道了stat这个命令可以查看到文件的权限,而且是用数字法表示的,剩下的只是截取的问题了,是不是值得

去学stat这个命令,在这里还有更简单的方法,stat -c %a /tmp/一条命令就可以。

5.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

分析:

技术分享

 

 

解释:首先我们可以使用netstat命令查看远程连接的IP,由于对ip的统计,我们下一步把ip取出来,

这个操作和案例一类似,这里就不深入研究了,再接着是排序,会使用sort命令也比较容易,统计数量

当然是uniq了,这样一分析发现题目很简单呢,以后要学会分析题目,对困难逐个攻破,加油。

答:

技术分享

这样就很容易得出答案了。

第一次尝试在博客中添加思维导图,写的不好,多多见谅。

6. 找出/etc/passwd中的两位或三位数

分析:

 

 

技术分享

 

解释:首先你可以很容易表示出一位数,即[[:digit:]]或[0-9] ,那么表示2位或3位数也就很简单了,

可以在后面加上\\{2,3\\},指定数字重复的次数,这样可以指定为2位数和3位数,这一题需要考虑的是锚定词首和词尾,

如果不锚定,筛选的范围就会变大,4位数5位数也会被包含在内,因此需要加上\\<.\\>.

 答:

技术分享

7. 显示CentOS6上所有系统用户的用户名和UID

分析:

技术分享

 

 

解释:

首先利用cut命令截取/etc/passwd的第一列和第三列是比较容易的,接下来是从这些用户中筛选出系统用户,

而筛选系统用户的条件是UID<500,如何用正则表达式表示出小于500的数,成为这一题的难点,不过我们先前知道

表示一位可以用[0-9] 那表示一个范围呢?也就不是那么的困难了,\\([0-9]{0,2}\\|[1-4][0-9]{2},还有就是注意用户名可能

是个数字而且在500以内,所以就必须限定范围和位置。

答:

技术分享

表示0-499的数字还有别的方法,课余同学们可以好好探讨。

8.添加用户bash、testbash、basher、sh、nologin(其shell

为/sbin/nologin),找出/etc/passwd用户名同shell名的行。

分析:

技术分享

解释:首先是关于创建用户的,在这里我们创建用户是没有困难的,关键是如何满足后面的条件,即用户名同shell名,

前面和后面的相同我们自然会想到使用后向引用,但是用户名是未知的该如何表示,那当然使用(.*)了,但是 这里需要

限制用户名的位置,所以就会知道^\\(.*\\)\\>,这样第一步就完成了,中间的内容我们不关心,所以可以用.*替代,接着是结尾的处理,

既然是后向引用,那么\\1肯定少不了,关键是在什么位置匹配,那当然是行尾即\\1$,还有一点要注意那就是只限制了\\1在行尾,

还要限制\\1左边的位置,即加上\\/将/作为左边的分界线。

答:

技术分享

这是一题典型的后向引用的题目,要多实验,在实验中寻求更多的解决方法。

 

以上是关于综合案例分析(sort,cut,正则)的主要内容,如果未能解决你的问题,请参考以下文章

Linux中cut,sort,uniq和wc的用法

Liunx 中sed、grep、cut、sort、tee、diff 、paste命令

Shell脚本------正则表达式与常用命令(sort,uniq,tr,cut)

grep,cut,wc,sort,diff,uniq,patch命令

Web APIs 正则表达式综合案例丨小兔仙儿登录页面

shell学习文件操作之sort,cut,uniq