07 grep 正则

grep

用于过滤的命令

参数 作用
-i(常用) 搜索时,忽略大小写
-c(常用) 统计过滤成功的行数
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n(常用) 列出所有的匹配行,显示行号
-h 查询多文件时不显示文件名
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行(取反)
-w(常用) 匹配整词
-x 匹配整行
-r 递归搜索
-q(常用) 禁止输出任何结果,已退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-A 2 显示的时候加上后两行
-B 2 显示的时候加上前两行
-C 2 显示的时候增加前后两行
#语法
grep [选项] [正则] [文件]

#案例
[root@tencent_cloud test]# grep -rl "nginx" /etc/nginx/
/etc/nginx/koi-utf
/etc/nginx/nginx.conf
/etc/nginx/win-utf
/etc/nginx/fastcgi_params
#可以通过关键字查找相关的配置文件,当然也可以用rpm -qc nginx

正则表达式用法

符号 作用
^ 匹配从头开始对(中括号外)(中括号内是取反的意思)
$ 匹配从尾开始对
. 匹配任意一个字符
* 左边的字符出现0次或无穷次
.* 匹配所有的,默认是匹配到最远的
.*? 匹配所有的,改为非贪婪匹配,需要指定-P
[ ] 匹配指定范围的任意一个字符
+ 左边的字符出现1次或无穷次(egrep / grep -E才好用)
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
[] 非字符组内的字符开头的行

拓展正则

# 扩展正则元字符
+					匹配一个或多个前导字符		   [a-z]+ove	
?					匹配零个或一个前导字符		   lo?ve	
a|b					匹配a或b					love|hate
()					组字符						love(able|rs)  (egon)+
(..)(..)\1\2		标签匹配字符				  (love)able\1er
x{n}			    x出现n次				    e{3}		
x{n,}			    x出现n次至无穷次			  e{3,}
x{n,m}		        x出现n次至m次			   e{3,6}
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾
[root@egon ~]# netstat -an |grep -w 80
tcp6       0      0 :::80                   :::*                    LISTEN    
[root@egon ~]# netstat -an |grep  '\<80\>'
tcp6       0      0 :::80                   :::*                    LISTEN    
[root@egon ~]# netstat -an |grep  '\b80\b'
tcp6       0      0 :::80                   :::*                    LISTEN  
# 若想使用扩展正则
grep加-E 或 egrep 或转义\

sed 加 -r 参数 或转义

AWK 直接支持大多数扩展正则,更多支持需要加选项--posix选项
posted @ 2021-06-18 16:18  BaiM0  阅读(62)  评论(0编辑  收藏  举报