linux 中 grep命令(含正则)
linux 三剑客之一
使用场景
-
文本处理之"查"
-
想要通过xxx查出想要的文本内容
-
实际: 通过"正则表达式"过滤出想要的文本内容(通过案例体会)
-
用到"正则表达式"知识点
-
作用: 过滤文本内容
-
语法
-
grep 参数 正则表达式(匹配规则) 文本路径
-
参数(使用见操作演示)
-
-E :使用拓展正则 等价于 egrep (别纠结,本文本查使用场景会用即可)
-
-R或-r : 递归匹配
-
-o 显示匹配成功的内容,显示一个则换行
-
-v 反向过滤
-
-i 忽略大小写
-
-n 显示出过滤的文本行号
-
-A 将匹配成功的后n行显示出来
-
-B : 匹配成功之后,将匹配行的前n行显示出来
-
-C : 匹配成功之后,将匹配行的前后各n行显示出来
-
-c 只显示匹配成功的行数字
-
-q 静默输出(即不打印)
-
配合$?使用
-
$? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败
-
l : 将文本的名称打印/显示出来(去重:你根据老师视频演示猜出来的,不一定正确)
-
案例
-
在/etc目录下,有多少个文件包含root
-
grep -rl 'root' /etc/ | wc -l
-----
正则
-----
分类
1 普通正则
2 拓展正则
3 案例(与grep命令配合使用)
4 转译字符\的含义
详细
1 普通正则
-
^ : 以某字符开头
-
$ : 以某字符结尾
-
. : 匹配除换行符之外的任意单个字符
-
* :匹配前导字符的任意个数
-
[] : 某组字符串的任意一个字符
-
[^] : 取反
-
[a-z] : 匹配小写字母
-
[A-Z] : 匹配大写字母
-
[a-zA-Z] : 匹配字母
-
[0-9] : 匹配数字
-
\ : 取消转义
-
() : 分组
-
\n : 代表第n个分组
2 拓展(高级)正则
-
{} :匹配的次数
-
{n} : 匹配n次
-
{n,} :至少匹配n次
-
{n,m} :匹配 n 到 m 次
-
{,m} :最多匹配m次
-
+ :匹配至少有一个前导字符
-
? : 匹配一个或零个前导字符
-
| :或
3 案例
-
在/etc/passwd文件中,匹配以ftp开头的行
-
grep '^ftp' /etc/passwd
-
在/etc/passwd文件中,匹配以bash结尾的行
-
grep 'bash$' /etc/passwd
-
匹配本机中有哪些ip
-
初步过滤
-
ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
-
精确过滤
-
([(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]\.){3}[(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]
-
要求将xxx中的去掉包含 # 开头的行,且要求 # 后至少有一个空格
-
grep -vE '^#\ +' /etc/fstab
-
找出文件xxx中至少有一个空格的行
-
grep -E '\ +' xxx
-
将 nginx.conf 文件中以#开头的行和空行,全部删除
-
grep -vE '^\ *#|^$' /etc/nginx/nginx.conf
-
过滤手机号的正则表达式
-
1[0-9]{10}
-
过滤邮箱的正则表达式
-
[a-zA-Z0-9-_]+@[a-z0-9]+\.(com|cn|com\.cn|net)
-
过滤密码,要求必须要大写字母、小写字母、数字以及下划线,长度在 8 到 16 之间
-
([A-Z]+[a-z]+[0-9]+_+){8,16}
4 转译字符\的含义
---------
grep操作演示
---------
无参数
-o 显示匹配成功的内容,显示一个则换行
-n 显示出过滤的文本行号
-A 将匹配成功的后n行显示出来
-
-B : 匹配成功之后,将匹配行的前n行显示出来
-
-C : 匹配成功之后,将匹配行的前后各n行显示出来
-c 只显示匹配成功的行数字
-v 反向过滤
-q 静默输出(即不打印)
配合$?使用
$? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败
-i 忽略大小写