面试官都在问 | Linux命令-grep
在我们面试各大公司的时候,关于Linux往往最容易问到的问题之一就是Linux指令,而其中,能够使用命令进行快速的文本过滤,查找文本中的目标内容,已经是一个高频且基本的能力了,一般,面试官往往通过对于该命令的考察,获取应聘者对Linux环境是否熟悉。我们结合海量面经,提取出最容易被问到的Linux当中grep命令的常见命令行参数,供大家参考。
- grep的核心作用
- grep常见过滤方式及选项
grep是什么
grep是一个文本过滤器,作用是在文件中查找符合我们要求的内容。
语法格式
第一种形式,从指定的文件中找出匹配pattern的行: grep [option] pattern [file1,file2,...]
第二种形式,从管道中找出匹配pattern的行:cmd | grep [option] pattern
说明:pattern是由正则表达式字符及文本字符所编写的过滤条件。
常用选项
选项 | 含义 |
---|---|
-v | 不显示匹配行信息 |
-i | 搜索时忽略大小写 |
-n | 显示行号 |
-r | 递归搜索 |
-E | 支持扩展正则表达式 |
-F | 不按正则表达式匹配,按字符串字面意思匹配 |
-c | 只输出匹配行的数量,不显示具体内容 |
-o | 只显示模式匹配到的字符串 |
实例:
我们的测试文件test.txt内容如下:
I love linux
i love LINUX
i Love Linux
I LOVE LINUX
i love Linu.*
-v 选项,反向匹配:
[root@localhost ~]# grep -v love test.txt
i Love Linux
I LOVE LINUX
-i 选项,忽略大小写:
[root@localhost ~]# grep -i love test.txt
I love linux
i love LINUX
i Love Linux
I LOVE LINUX
-n 选项,显示匹配行的行号:
[root@localhost ~]# grep -n love test.txt
1:I love linux
2:i love LINUX
-E 支持扩展正则,|
是扩展正则中的特殊含义的符号,代表任意一个匹配(不是管道哦):
[root@localhost ~]# grep -E 'linux|LINUX' test.txt
I love linux
i love LINUX
I LOVE LINUX
-F 不要按正则来解析,就要字符串本身:
[root@localhost ~]# grep -F "Linu.*" test.txt
i love Linu.*
-c 只显示匹配的行数:
[root@localhost ~]# cat /etc/passwd | grep -c "root" # 查找passwd文件中有多少行有root
2
实战
查看最近有哪些远程IP以root身份登陆过我们的机器,统计每个IP登陆的次数。我们的思路如下:
1.通过last列出最近登陆系统的所有用户。
2.过滤出以root登陆系统的IP。
3.过滤出远程登陆的IP。
4.统计出每个IP登陆的次数。
last | grep "^root" | grep -E -o "([[:digit:]]{1,3}.){3}[[:digit:]]{1,3}" | sort | uniq -c
总结
grep主要功能是文本过滤,往往需要和管道还有正则表达式搭配使用才能发挥威力。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EoRncsbw-1602670793953)(image/grep.png)]
制作人 : 李涛
审核人:王海斌