简介:
grep即(Global search REgular expression and Print out the line)全局的搜索正则表达式并且打印显示出来。
通俗点讲:根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。
正则表达式:
正则表达式是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;
元字符:不便是其字面意思,而用于额外功能性描述
基本正则表达式的元字符:
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字
[0-9],[[:digit:]]:任意单个数字
[a-z],[[:lower:]]:任意单个小写字母
[A-Z],[[:upper:]]:任意单个大写字母
[[:space:]]:空白字符
[[:punct:]]:标点符号
[[:alpha:]]:所有大小写字母
[[:alnum:]]:所有数字字母
[^]:取反
次数匹配:
用于实现指定其前面的字符所能出现的次数
*:任意长度,它前面的字符可以出现任意次
\?:出现0次或者1次,也就是说它前面的字符是可有可无的
\{m\}:m次,它前面的字符要出现m次
\{m,n}:至少m次,至多n次(m<n)
\{m,\}:至少m次
\{0,n\}:至多n次
.*:任意长度的任意字符
位置锚定:
^:行首锚定,写在模式最左侧
$:行尾锚定,写在模式最右侧
^$:空白行
\<:词首锚定,出现于单词左侧
\>:词尾锚定,出现于单词右侧
\b:词首词尾都可以
(注:不包含特殊字符的连续字符组成的串叫单词)
分组:
\(\) 例如:\(ab\)*
注:分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被多次引用
引用:
\n:引用第n个括号所匹配到的内容,而非模式本身
扩展正则表达式:
字符匹配:
.:任意单个字符
[]:匹配任意字符范围内
[^]:匹配任意范围外
次数匹配:
*:任意次
?:0次或1次
+:至少1次
{m}:精确匹配m次
{m,n}:至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
锚定
^:行首
$:行尾
\<,\b:词首
\>,\b:词尾
^$,^[[:space:]]*$:空行
分组:
()
引用:
\n
或者:
a|b:a或b
grep的用法:
grep [option]… ‘PATTERN' FILE…
grep的命令选项:
-v:去反向选取
-o:仅显示匹配的字串本身,而非字串所在的行
-i:ignore-case,忽略字符大小写
-E:支持使用扩展正则表达式
-A:显示之前两行
-B:显示之后两行
-C:显示上下两行
egrep:egrep用法等同于grep -E
实战操作:
1.显示/proc/meminfo文件中以大写或小写S开头的行;
2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
3.显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步;仅显示上述结果中ID号最大的用户;
4.找出/etc/passwd文件中的一位数或两位数;
5.显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
6.找出netstat -tan命令执行结果中以‘LISTEN’结尾的行;
7.找出ifconfig命令结果中1-255之间的数字;
8.显示当前系统上root或git用户的默认shell;
9.使用echo命令输出一个路径,而后使用grep取其基名
原创文章,作者:水蒸气,如若转载,请注明出处:http://www.178linux.com/4148