java堆栈面试题,一文带你搞懂grep的常用技巧,来看看这份超全面的《Java面试题及解析》

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

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、安卓逆向、云计算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值