grep:
Global search REgular expression and Print out the line
文本搜索工具:根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。
用法:grep [OPTION]... 'PATTERN' FILE...
grep--color 自动执行着色
正则表达式:是由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能;
两种类型的元字符
基本正则表达式
扩展正则表达式
基本正则表达式:
字符匹配:
. 匹配任意单个字符
[] 匹配指定集合中的任意单个字符
[[:digit:]],[0-9]匹配指定集合中的单个数字
[[:lower:]],[a-z]匹配指定集合中的单个小写字母
[[:upper:]],[A-Z]匹配指定集合中的单个大写字母
[[:alpha:]],[a-zA-Z]匹配指定集合中的单个大写或小写字母
[[:alnum:]],[0-9a-zA-Z] 匹配指定集合中的单个数字或小写字母或大写字母
[[:space:]] 匹配指定集合中的空白格
[[:punct:]]匹配指定集合中的标点符号
[^] 匹配指定集合外的任意单个字符
* 匹配其前面的字符任意次,0,1或多次;
\? 匹配其前面的字符0次或1次;
\+ 匹配其前面的字符出现至少1次;
\{m\} 匹配其前面的字符m次;
\{m,n\}匹配其前面的字符至少m次,至多n次;
.* 匹配任意长度的任意字符
位置锚定:
^ 行首锚定 写在模式的最左侧
$ 行尾锚定 写在模式的最右侧
^$ 空白行
\< 词首锚定, \b 出现在要查找的单词模式的左侧;\<char
\> 词尾锚定,0);">\b 出现在要查找的单词模式的右侧;char\>
\<pattern\>匹配单词
分组:\(\)
后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用
\1,\2,\3
模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容
grep选项:
-i 忽略字符大小写
-E 使用扩展正则表达式
举例练习:
1、显示/proc/meminfo文件中以大写或小写S开头的行;
2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
注:匹配单词取反时,必须使用-v选项。
\<\>只锚定数字和字母
3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户;
4、找出/etc/passwd文件中的一位数或两位数;
注:‘|’或者符仅用于egrep的模式中,在grep模式中则使用‘\|’转译该符号
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
7、找出netstat -tan命令执行结果中以'LISTEN'(后可有空白字符)结尾的行;
Egrep 扩展的正则表达式
用法:
# grep -E 'pattern' file...
# egrep 'pattern' file...
注:“#”在命令行使用的命令格式
扩展正则表达式的元字符:
字符匹配:
. 匹配任意单个字符
[] 匹配指定集合内的单个字符
[^]取反,匹配指定集合外的任意单个字符
匹配次数限定:
* 匹配其前面字符0次,1次,多次
? 匹配其前面字符0次或1次;
+ 匹配其前面的字符至少1次;
{m} 匹配其前面的字符m次;
{m,n}匹配其前面字符至少m次-->{m,};至多n次-->{0,n}
锚定:
^ 锚定行首
$ 锚定行尾
\< 锚定词首
\> 锚定词尾 或使用 \b
分组:
()使用时无需\支持后向引用:或者:
a|b 匹配a或者b
ab|cd 匹配整个左侧或右侧
举例
练习1:显示当前系统上root、centos或user1用户的默认shell及用户名;
练习2:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;
练习3:使用echo输出一个路径,而使用egrep取出其基名;
注意:此题查找的路径中带符号,固使用命令时要思考清楚自己想搜索的路径结果
用法fgrep [option] 'string' file...
原文链接:https://www.f2er.com/regex/361064.html