最新一文带你搞懂grep的常用技巧(附带分解版的筛选提取IP实验),阿里珍藏版Java框架体系架构手写文档

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。

[^123]:匹配一个字符,这个字符是除了1、2、3以外的所有字符。

对于一些常用的字符集,系统做了定义:

[A-Za-z]等价于 [[:alpha:]]

[0-9]等价于 [[:digit:]]

[A-Za-z0-9] 等价于 [[:alnum:]]

tab,space 等空白字符 [[:space:]]

[A-Z]等价于 [[:upper:]]

[a-z]等价于 [[:lower:]]

,.:等标点符号[[:punct:]]

[root@control ~]$grep ro… /etc/passwd #ro… 表示ro后面要有2个任意字母

root❌0:0:root:/root:/bin/bash

operator❌11:0:operator:/root:/sbin/nologin

systemd-bus-proxy❌999:998:systemd Bus Proxy:/:/sbin/nologin

tss❌59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

rtkit❌172:172:RealtimeKit:/proc:/sbin/nologin

chrony❌992:989::/var/lib/chrony:/sbin/nologin

setroubleshoot❌991:988::/var/lib/setroubleshoot:/sbin/nologin

dockerroot❌989:984:Docker User:/var/lib/docker:/sbin/nologin

[root@control ~]$grep cc[xyz] /etc/passwd #ccx后面必须是xyz中的一个

ccx❌1000:1000:ccx:/home/ccx:/bin/bash

ccx1❌1001:1001::/home/ccx1:/bin/bash

ccx2❌1002:1002::/home/ccx2:/bin/bash

ccx3❌1003:1003::/home/ccx3:/bin/bash

[root@control ~]$grep cc[^xyz] /etc/passwd #ccx后面除了xyz的任意字母

tss❌59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

libstoragemgmt❌996:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin

[root@control ~]$grep 10[0-9] /etc/passwd #10后面跟一个0-9的数字

games❌12💯games:/usr/games:/sbin/nologin

qemu❌107:107:qemu user:/:/sbin/nologin

ccx❌1000:1000:ccx:/home/ccx:/bin/bash

ccx1❌1001:1001::/home/ccx1:/bin/bash

ccx2❌1002:1002::/home/ccx2:/bin/bash

ccx3❌1003:1003::/home/ccx3:/bin/bash

[root@control ~]$grep 10[0-9][0-9] /etc/passwd #10后面跟2个0-9的数字

ccx❌1000:1000:ccx:/home/ccx:/bin/bash

ccx1❌1001:1001::/home/ccx1:/bin/bash

ccx2❌1002:1002::/home/ccx2:/bin/bash

ccx3❌1003:1003::/home/ccx3:/bin/bash

[root@control ~]$grep : /etc/passwd # 符号这直接替换为 想要筛选的符号即可

root❌0:0:root:/root:/bin/bash

bin❌1:1:bin:/bin:/sbin/nologin

daemon❌2:2:daemon:/sbin:/sbin/nologin

adm❌3:4:adm:/var/adm:/sbin/nologin

lp❌4:7:lp:/var/spool/lpd:/sbin/nologin

sync❌5:0:sync:/sbin:/bin/sync

shutdown❌6:0:shutdown:/sbin:/sbin/shutdown

halt❌7:0:halt:/sbin:/sbin/halt

mail❌8:12:mail:/var/spool/mail:/sbin/nologin

在这里插入图片描述

匹配次数(筛选)


一个正则表达式后面可以跟随多种重复操作符之一,主要是用来匹配任意字符出现的次数!

{}的符号在shell有特殊意义,因此要用到转义字符\

? 先前的项是可选的,最多匹配一次,等价于{0,1}。

* 先前的项可以匹配零次或多次,等价于{0,},所以 “._” 表述任意字符任意次,即无论什么内容全部匹配。

+ 先前的项可以匹配一次或多次。

"x\{n\}y" x是代表需要出现次数的任意字符,y是后面需要跟的任意字符(可选项,也可以用_),先前x的项将匹配恰好 n 次

"x\{n,\}y" x是代表需要出现次数的任意字符,y是后面需要跟的任意字符(可选项,也可以用*),先前的项可以匹配 n 或更多次

"x\{n,m\}y" x是代表需要出现次数的任意字符,y是后面需要跟的任意字符(可选项,也可以用*),先前的项将匹配至少 n 次,但是不会超过 m 次

注:上面的x和y均可以套入正则,如[A-Z],y是可选项,但也可以套入正则,如[A-Z],但如果x不满足条件,y是没有意义的。

[root@control ~]$grep -n “/*sh” /etc/passwd #\转义/,等同于grep “/.*sh” /etc/passwd

1:root❌0:0:root:/root:/bin/bash

7:shutdown❌6:0:shutdown:/sbin:/sbin/shutdown

33:setroubleshoot❌991:988::/var/lib/setroubleshoot:/sbin/nologin

37:sshd❌74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

42:ccx❌1000:1000:ccx:/home/ccx:/bin/bash

43:apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin

44:tomcat❌53:53:Apache Tomcat:/usr/share/tomcat:/sbin/nologin

46:ccx1❌1001:1001::/home/ccx1:/bin/bash

47:ccx2❌1002:1002::/home/ccx2:/bin/bash

48:ccx3❌1003:1003::/home/ccx3:/bin/bash

[root@control ~]

[root@control ~]$cat a

root

ccx

hero

go fot it

just

do

it

2020 years

05 mon

[root@control ~]$grep “[0-9]{2}” a # 我怀疑我系统有问题,按理说不应该出现2020的,注意这个问题!

2020 years

05 mon

[root@control ~]$grep -o “[0-9]{2,3}” a #如果要精确 就需要 -o 参数,但这样就不是整行内容了。

202

05

[root@control ~]$grep “[0-9]{3,4}” a #0-9出现3或4次,这个对了

2020 years

[root@control ~]$grep “c{2}” a #字符c出现2次,这也没问题。

ccx

[root@control ~]$

位置锚定


^x:锚定行首,x代表任意字符。

x$:锚定行尾,x代表任意字符。技巧:^$用于匹配空白行,所以grep -v ^$ 就是过滤空白行

"\bx或\<":锚定单词的词首,x代表任意字符。如"\blike"不会匹配alike,但是会匹配liker

"x\b或\>":锚定单词的词尾,x代表任意字符。如"like\b"不会匹配alike,但是会匹配liker

"\bx\b":筛选固定单词,x代表任意字符(必须是一个完整的单词,不能是一个单词的一部分)。如"\blike\b"不会匹配alike和liker,只会匹配like

"\B":与\b作用相反。

[root@control ~]$cat a

root

ccx

hero

go fot it

just

do

it

2020 years

05 mon

[root@control ~]$grep ^c a#c开头

ccx

[root@control ~] g r e p x grep x grepx a #x结尾

ccx

[root@control ~]KaTeX parse error: Expected group after '^' at position 10: grep -v "^̲" a #过滤空白行

root

ccx

hero

go fot it

just

do

it

2020 years

05 mon

[root@control ~]$grep “\bc” a #c开头

ccx

[root@control ~]$grep “s\b” a #b结尾

2020 years

[root@control ~]$grep “\bcx\b” a #只有ccx没有cx这个单词,不能为单词的一部分,如下面的ccx可以正常筛选

[root@control ~]$grep “\bccx\b” a # 固定筛选ccx

ccx

[root@control ~]$

分组及引用


\(string\) :将string作为一个整体方便后面引用

\1 :引用第1个左括号及其对应的右括号所匹配的内容。

\2:引用第2个左括号及其对应的右括号所匹配的内容。

\n :引用第n个左括号及其对应的右括号所匹配的内容。

[root@control ~]KaTeX parse error: Got function '\(' with no arguments as superscript at position 8: grep "^\̲(̲[[:alpha:]]\).*…" /etc/passwd #开头和结尾相同字母的行

nobody❌99:99:Nobody:/:/sbin/nologin

nfsnobody❌65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

ntp❌38:38::/etc/ntp:/sbin/nologin

[root@control ~]$

过滤IP代码分解

=======================================================================

说明


筛选IP 首先你得知道 你的IP是配置在哪个网卡的,如果有多个bond,你要知道自己想筛选哪个bond的IP。

查看方式有很多,这里说3种吧!

  • 第一种

这种方法适用于你知道网卡(ip配在哪个网卡中)。

去网络配置文件中查看网卡,网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33(网卡名称)

egrep 筛选ip代码块(下面会说代码的) /etc/sysconfig/network-scripts/ifcfg-ens160(网卡名称)

在这里插入图片描述

  • 第二种

和第一种方式一样,你得知道你ip配在哪个网卡中,只是这不用去配置文件里查看,稍微简单些。

ip a show 网卡名称 | egrep 筛选ip代码块(下面会说代码的)

在这里插入图片描述

  • 第三种

这种就是你不必去查ip配在哪个网卡上的,只需要知道,ip段即可! ifconfig 和 ip a 相同。

ifconfig | egrep 筛选ip代码块(下面会说代码的)| grep ip段(比如0.0)

在这里插入图片描述

代码


代码分解

先来康康,检索出 0-299(其实到255就可以了,但我想提高到299,反正也没坏处)的范围代码:egrep '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])' (这里()可以不需要加,但为了养成好习惯,加上吧)

实现原理:|在这起分割作用,具体的我就不做解释了。 [0-9]提取个位数,[1-9][0-9]提取10-99,1[0-9][0-9]提取100-199的数,2[0-9][0-9]提取200-299的数

在这里插入图片描述

全部代码

  • 完整代码

egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>'

- 原理:

\<和 \> 是精确查找,等同于"\bx\b",不明白的看上面位置锚定的说明。

\.就是转义后 .的意思。

(检索出 0-299代码)\.(检索出 0-299代码)\.(检索出 0-299代码)\.(检索出 0-299代码)因为IP是由3个.隔开的4串数字,这是固定的。

[root@control network-scripts]$cat ifcfg-ens160 | egrep ‘<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])>’

#DNS1=10.233.3.225

IPADDR=10.233.3.225

GATEWAY=10.233.3.254

在这里插入图片描述

  • 简化代码

其实也就是相同的代码用{3}替代而已,建议了解就好,没必要为了少些点代码,把自己搅晕了。

这里放完整版代码和简化代码你对比一下吧!

完整版:

egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>'

简化版:

egrep '\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>'

[root@control network-scripts]$ifconfig | egrep ‘<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])>’

inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

在这里插入图片描述

最新整理电子书

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

9][0-9]|2[0-9][0-9])>’

inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

[外链图片转存中…(img-1LzSZALZ-1715658200057)]

最新整理电子书

[外链图片转存中…(img-3CcWXpXJ-1715658200057)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值