grep与正则表达式

温习一下grep和正则表达式

grep [-acinv][--color=auto] 'abc' filename
-a 将binary文件以text文件方式搜寻数据
-c 计算找到‘abc’的次数
-i 忽略大小写
-n 输出行号
-v 反向选择
--color=auto 找到的关键字部分加颜色显示

文件内容查找
grep 'abc' * 搜索当前目录下带‘abc’行的文件
grep -r 'abc' * 搜索当前目录及其子目录下带‘abc’行的文件
grep -l -r 'abc' * 搜索当前目录及其子目录下带‘abc’行的文件,只显示文件名
正则表达式
[] 代表一个字节,a[bB]c,代表abc、aBc
    之前在一个脚本里面需要对入参1进行截取,但特征值是变化的,当时纠结了半天没能妥善处理,后来采用这个正则完美解决:${1%2.8.0*}改为${1%[0-9].[0-9].[0-9]*},${1%abc*}截取入参1字符abc之前的部分。

[^] 反向选择,[^a]bc,代表包含bc,但不包含abc

[a-zA-Z0-9] 代表大小写、数字中的一个
[^a-zA-Z0-9] 代表不是大小写、数字中的一个
^abc 以abc开始的行
^[a-z]与[^a-z]区别,^[^a-zA-Z] 排除英文字母开始的行
abc$ 以abc结尾的行
\.$ 以小数点结束的行,此处“\”为转义符
^$ 空白行
. 有且只有一个字节 good g..d
* 重复前一字符0到无穷次 go*d表示gd god good goood ......
g.*g 以g开头和结尾,中间字符可有可无
{} 限定连续字符范围,需要"\"转义符
o\{2\} 两个o
o\{2,5\} 2到5个o
o\{2,\} 2到无穷个o

扩展grep(grep -E 或 egrep)
增加额外的正则表达式元字符集
aa|bb 包含aa或bb的行
egrep 'aa|bb' files
等效于:grep 'aa\|bb' files 扩展元字符前加\ 将自动启用扩展选项-E
3\+ 包含一个或多个3的行
grep '\(no\)\+' files 搜索一个或多个连续的no的行
grep -E '(no)+' files
grep '2\.\?[0-9]' files 搜索包含2,后面跟0个或1个点,再跟一个数字
grep -E '2\.?[0-9]'

不使用正则表达式 fgrep grep -F
查询速度比grep快,但只能找固定的文本,不能是规则表达式

猜你喜欢

转载自blog.csdn.net/qq_40809549/article/details/80987589