Linux的gre命令匹配数字,linux之grep命令和正则表达式练习

1.创建一个文档FILE,里面写如下内容:

he love his lover

she like her liker

they love their liker

使用grep命令来搜索以l开头,以e结尾即l..e和l..er的字符串

答案:

#grep --color=auto “\(l[[:alpha:]]\{2\}e\).*\1r” FILE

#grep –E --color=auto“(l[[:alpha:]]{2}e).*\1r” FILE

解析:

前面的[[:alpha:]]意思是任意字母

\{2\}表示精确匹配两次之前的任意字母

l[[:alpha:]]\{2\}e就是指l..e也可以写为l[[:alpha:]][[:alpha:]]e

l[[:alpha:]]\{2\}e加上\(\)就代表\(l[[:alpha:]]\{2\}e\)整体要被后面引用

之后的.*代表中间的任意长度任意字符

再后面的\1意思就是引用前面的\(l[[:alpha:]]\{2\}e\)

然后后面再加个r变为\1r就成了l..er

这个例子的主要目的是练习\(\)\1\2\3à前后匹配,引用此前出现过的字符

的使用,所以,前面的\(l[[:alpha:]]\{2\}e\).*\1r还可以写为\(l[[:alpha:]]\{2\}\)\(e\).*\1\2r这里只不过是把e给\(\)起来,然后后面再用\2引用,效果跟之前是一样的,都表示l..e.*l..er

2.查找如下字符串中形如xxx.xxx.xxx.xxx的字符串,其中x必须是数字

abc.124.221.345

12a.222.443.256

12.235.111.555

212.592.111.303

222?333.111/453

111.222.333.444

1.2.44.122

答案:

#grep --color=auto “[[:digit:]]\{3\}\.[[:digit:]]\{3\}\.[[:digit:]]\{3\}\.[[:digit:]]\{3\}”FILE

会显示出如下结果:

212.592.111.303

111.222.333.444

解析:

[[:digit:]]指的是任意数字,也可以用[0-9]替代

\{3\}指的是前面的任意数字引用3次

\.指的是点即.这里.之前必须加\转译,否则就会成为匹配任意单个字符,比如如果写成[[:digit:]]\{3\}.那么这一题的答案就会在显示出212.592.111.303和111.222.333.444的同时还显示出222?333.111/453

组合起来就成了[[:digit:]]\{3\}\.即xxx.

也可以写成:

#grep –color=auto “[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}” FILE

还可以写成#grep -E –color=auto “([0-9]{3}\.){3}[0-9]{3}” FILE

如果这一题只想搜索出111.222.333.444这种重复型数字的结果,那么可以写为

# grep --color=auto "\([0-9]\)\1\1\.\([0-9]\)\2\2\.\([0-9]\)\3\3\.\([0-9]\)\4\4" FILE

这里就是检查对\(\) \1 \2 \3的应用了\([0-9]\)\1\1\.对应111.\([0-9]\)\2\2\.对应222.\([0-9]\)\3\3\.对应333.\([0-9]\)\4\4对应444

如果这一题想搜出所有正确的1到3位数字和.组成的序列,可以写为

#egrep --color=auto "([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}" FILE

还可以写为

#egrep --color=auto "\" FILE这种写法主要联系扩展正则表达式中|或的用法,注意A|B之后还要写别的,那么一定要把A|B用小括号括起来,即(A|B)

扩展:搜索里面合法的IP地址,可以写为

合法IP地址:

第一个.前的应该是[1-9]或者[1-9][0-9]即1-99或者1[0-9][0-9]即100-199或者

2[0-1][0-9]即200-219或者22[0-3];组合起来合法IP的第一段就是

[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3]

优化可以写为[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3]

后面两段:

[0-9]或者[1-9][0-9]即1-99或者1[0-9]{2}即100-199或者2[0-4][0-9]即200-249或者25[0-5]即250-255

组合起来就是[0-9]|[1-9][0-9]| 1[0-9]{2}|2[0-4][0-9]| 25[0-5]

最后一段:

[1-9]这里只能是1-9不能为0或者[1-9][0-9]即1-99或者1[0-9]{2}即100-199或者2[0-4][0-9]即200-249或者25[0-4]即250-254

组合起来最后就是搜索一个合法IP,记得这里还要在前后加词首,词尾锚定符,否则,因为grep命令的贪婪工作模式,如果出现224.0.1.253或者192.168.0.259也会被当成24.0.1.253和192.168.0.25正确的选项

#egrep --color=auto "\”FILE

3.显示/proc/meminfo中以不区分大小写的s开头的行

#grep --color=auto “^[sS].*” /prpc/meminfo

# grep -E --color=auto "^[sS].*" /proc/meminfo

4.显示/etc/passwd中以nologin结尾的行

#grep --color=auto “nologin$” /etc/passwd

5.显示/etc/inittab中以#开头,且在后面跟一个或者多个空白字符,而后又跟了任意非空白字符的行

#grep –color=auto “^#[[:space:]]\{1,\}[^[:space:]]\{1,\}” /etc/inittab

或者#grep -E --color=auto "^#[[:space:]]{1,}[^[:space:]]{1,}" /etc/inittab

6.显示/etc/inittab中包含了:一个数字:的行

#grep --color=auto “:[[:digit:]]:” /etc/inittab

还可以写为# egrep --color=auto "^[[:space:]]{1,}" /boot/grub/grub.conf

7.显示/boot/grub/grub.conf文件中以一个或者多个空白字符开头的行

#grep --color=auto “^[[:space:]]\{1,\}” /boot/grub/grub.conf

8.显示/etc/inittab文件中以一个数字开头并以一个与数字开头相同的数字结尾的行

#grep --color=auto “^\([[:digit:]]\).*\1$” /etc/inittab

# egrep --color=auto "^([[:digit:]]).*\1$" /etc/inittab

9.查找当前系统上名字为user1的用户的账号的相关信息,/etc/passwd,user11,myuser1

#grep --color=auto “^user1\>” /etc/passwd

10.查找当前系统上以其为附加组的用户有两个或者两个以上的组的相关信息,/etc/group,:

#grep --color=auto “[^:]*:[^:]*:[^:]*:[[:alnum:]]\{1,\},.*” /etc/group

# egrep --color=auto "([^:]*:){3}([[:alnum:]]*,){1,}.*" /etc/group

11.查找当前系统上其用户账号密码最长使用期限为99999天的用户账号的相关信息

#grep --color=auto “[^:]*:[^:]*:[^:]*:[^:]*:99999:” /etc/shadow

#grep –E --color=auto “([^:]*:){4}99999:” /etc/shadow

这里还可管道来只显示出用户名和99999天

#egrep --color=auto "([^:]*:){4}99999:" /etc/shadow|cut -d: -f1,5

12.分析/etc/inittab文件中如以下两行的文本特征,请写出可以精确找到类似两行的模式,而且要求每一行中出现在数字必须相同:

l1:1:wait:/etc/rc.d/rc1

l5:5:wait:/etc/rc.d/rc5

#grep –color=auto “l\([15]\):\1:wait:/etc/rc.d/rc[[:space:]]\{1,\}\1” /etc/inittab

#egrep --color=auto "l([15]):\1:wait:/etc/rc.d/rc([[:space:]]){1,}\1" /etc/inittab

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值