难道这样就够了吗?不,远远不够!
提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。
备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记
我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。
今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!
[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是配置在哪个网卡的,如果有多个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收集的一些大厂的面试真题(都整理成文档,小部分截图)
最新整理电子书
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)]