文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行进行匹配检查并打印匹配到的行
模式:由正则表达式的元字符及文本自负所编写的过滤条件
--color=auto # 高亮显示
-i:忽略字符大小写
-w:强制完全匹配字词
-o:仅显示匹配到的字符串本身
-v:显示不能被匹配到的行
-E:支持扩展正则表达式
-q:静默模式,不输出内容,脚本判断
-n:输出的同时打印行号
-H:为每一匹配项打印文件名
-A:打印以文本结尾的NUM 行
-B:打印以文本起始的NUM 行
-C:印输出文本NUM 行
字符匹配
. 匹配任意单个字符;
[] 匹配指定范围内的任意单个字符;
[^] 匹配指定范围外的单个字符;
匹配数字[:digit:];
匹配小写字母[:lower:];
匹配大写字母[:upper:];
所有字母[:alpha:];
所有字母+数字[:alnum:];
所有标点符号[:punct:];
所有空白字符[:space:];
grep "r[[:alpha:]][[:alpha:]]t" /etc/passwd
匹配次数:用在要指定其出现次数字符的后边,用于限制前面字符出现的次数(默认工作在贪婪模式);
*:匹配前面字符任意次,0次,1次或多次;
grep "r.?t" /etc/passwd
.*:匹配任意长度的任意字符;
?:匹配前面的字符0次或1次;
\+:匹配前面的字符一次或多次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
位置锚定
练习
显示/etc/passwd不以/bin/bash结尾的行
]$ grep -v "bin/bash"$ /etc/passwd
显示/etc/passwd/文件中的2位数或三位数
]$ grep "\<[0-9]\{2,3\}\>" /etc/passwd
]$ grep "\<[0-9]{2,3}\>" /etc/passwd
显示/etc/grub2.cfg文件中,至少一个空白字符开头,且后面非空白字符的行
]$ grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
]$ grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
找出netstat -tan命令的结尾中以"LISTEN"后跟0、1或多个空白字符结尾的行
$] netstat -tan|grep "LISTEN[[:space:]]*$"
分组及引用
分组括号内的模式匹配到的内容会被正则表达式引擎记录在内部变量中,引用格式为
\1;模式从左侧起,第一个"("及")"之间的模式锁匹配到的字符
\2;
\3,……
\(xy\)*ab:xy可以出现0次、1次或多次
vim lovers.txt
He likes his lover.
He loves his lover.
SHe likes her liker.
SHe loves her liker.
grep "\(l..e\).*\1" lovers.txt
后向引用:引用前面的分组括号中模式所匹配到的字符。
egrep
选项
字符匹配
次数匹配
位置锚定
分组及引用
():分组;括号内的模式匹配到的内容会被记录到正则表达式引擎的内嵌变量中
向后引用:\1,\2,\3,……
a|b:a或者b
原文:https://www.cnblogs.com/liy36/p/12131574.html