当你在使用grep命令的时候肯定会用到正则表达式,那么怎么在grep命令中使用正则表达式呢?
正则表达式元字符
grep命令支持很多正则表达式的元字符,以使用户能够更精准的定义要查找的模式。例如,可以通过制定的选项来关闭大小写敏感,要求显示行号等。
元字符 | 功能 | 示例 | 匹配对象 |
^ | 行首定位符 | ‘^user' | 匹配所有以user开头的行 |
$ | 行尾定位符 | ’user$' | 匹配所以以user结尾的行 |
。 | 匹配一个字符 | ‘u.r' | 匹配包含一个u,后跟一个字符,再跟一个r的行 |
* | 匹配两个或多个前导字符 | ’u*ser' | 匹配包含零个或多个u后,跟ser模式的行 |
[] | 匹配一组字符中的人一个 | ‘[uU]ser' | 匹配包含user或者User的行 |
[^] | 匹配不在指定字符组里的字符 | ’[^A-S]ser‘ | 匹配一个不在A到S之间的字符,并且该字符后紧跟着ser的行 |
\< | 词首定位符 | ’\<user‘ | 匹配包含以user开头的词的行 |
\> | 词尾定位符 | ’user\>‘ | 匹配包含以user结尾的词的行 |
\<..\> | 标记匹配到的字符 | ’\<user\>' | 匹配包含<user>的行 |
{M}{M,}{M,N} | 匹配出现的次数至少M次,但不超过N次 |
'u\{4\}u\{5\} u\{5,8\}' |
匹配连续出现4个u的行匹配连续出现最少5个u的行 匹配连续出现最少5个,最多8个u的行 |
grep 正则表达式示例:
在/etc/passwd 里查找包含“user1“字符串的行
[root@devops~]#grepuser1/etc/passwd user1:x:502:503::/home/user1:/bin/bash
如果想忽略大小写的区做搜索可以使用-i选项
#grepuser1/etc/passwd
你可以使用"."元字符为一个单个的字符做匹配,例如我们可以使用下面的命令去匹配一个以”u"开头,以“r”结尾,中间是任意一个字符的行
[root@devops~]#grep'\<u.r\>'/etc/passwd game:x:12:100:games:/usr/games:/sbin/nologin
如何在grep正则表达式中准确的匹配所有包含两个字符的行?
[root@devops~]#grep'^..$'/