hero
[root@control ~]$grep -v root a #过滤root
ccx
hero
[root@control ~]$
[root@control ~]$grep -q ccx /etc/passwd #不会打印内容,即使ccx存在
[root@control ~]$echo $? #返回0就是说明上上面-q有内容,一般用于脚本中返回判断条件用
0
[root@control ~]$grep -q ccxcxxc /etc/passwd # 这个ccxcxxc明显不存在
[root@control ~]$echo $? #所以返回1
1
[root@control ~]$
[root@control ~]$grep -n ccx /etc/passwd #显示行号
42:ccx❌1000:1000:ccx:/home/ccx:/bin/bash
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 ~]$grep -nw ccx /etc/passwd #-w精确查找
42:ccx❌1000:1000:ccx:/home/ccx:/bin/bash
[root@control ~]$
[root@control ~]$grep -c ccx /etc/passwd #仅显示匹配到的行数
4
[root@control ~]$grep -on ccx /etc/passwd# 仅显示匹配到的内容,也就是该文中所有ccx,结合n更直观
42:ccx
42:ccx
42:ccx
46:ccx
46:ccx
47:ccx
47:ccx
48:ccx
48:ccx
[root@control ~]$
[root@control ~]$cat a#测试文档
root
ccx
hero
go fot it
just
do
it
[root@control ~]$grep -nA 2 ccx a #打印关键字后两行,有时候在脚本中筛选比awk还好用,记住ABC的使用方法
2:ccx
3-hero
4-go fot it
[root@control ~]$grep -nB 2 go a #打印关键字前2行
2-ccx
3-hero
4:go fot it
[root@control ~]$grep -nC 2 go a #打印关键字前后2行
2-ccx
3-hero
4:go fot it
5-just
6-do
[root@control ~]$
1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)
代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:fgrep -c "printf" hello.c
2、使用基本正则表达式,下面谈关于基本正则表达式的使用:
匹配字符:
.
:任意一个字符。
[abc]
:表示匹配一个字符,这个字符必须是abc中的一个。
[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
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
片转存中…(img-Hd8aPEQs-1712419750746)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算