天天看点

面试官都在问 | Linux命令 - grep

面试官都在问 | 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 选项,忽略大小写:

[root@localhost ~]# grep -i love test.txt      

-n 选项,显示匹配行的行号:

[root@localhost ~]# grep -n love test.txt      

-E 支持扩展正则,​

​|​

​是扩展正则中的特殊含义的符号,代表任意一个匹配(不是管道哦):

[root@localhost ~]#  grep -E 'linux|LINUX' test.txt      

-F 不要按正则来解析,就要字符串本身:

[root@localhost ~]#  grep -F "Linu.*" test.txt      

-c 只显示匹配的行数:

[root@localhost ~]# cat /etc/passwd | grep -c "root" # 查找passwd文件中有多少行有root      

实战

查看最近有哪些远程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      

总结

grep主要功能是文本过滤,往往需要和管道还有正则表达式搭配使用才能发挥威力。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EoRncsbw-1602670793953)(image/grep.png)]