# 匹配数字
^[0-9]+$ 123 456 5y7
# 匹配Mail
[a-z0-9_]+@[a-z0-9]+\.[a-z]+ qfedu@1000phone.com
# 匹配IP
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
或
[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}
[root@localhost ~]# egrep ‘([0-9]{1,3}\.){3}[0-9]{1,3}‘ /etc/sysconfig/network-scripts/ifcfg-ens33
# shell元字符
[root@localhost ~]# ls *.log
ping.log
# 正则表达式元字符
[root@localhost ~]# grep ‘root*‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# vim
# /etc/passwd
:1,$ s/root/123/g
:1,$ s/[rR]oot/123/g
字符 | BRE/ERE | 含义 |
---|---|---|
. | BRE&ERE | 匹配任意单个字符(除字符串结束符 NUL) |
^ | BRE&ERE | 匹配行首,如 ^abc,匹配以 abc 开头的字符串 |
$ | BRE&ERE | 匹配行尾,如 abc$,匹配以 abc 结尾的字符串 |
* | BRE&ERE | 匹配 0 个或任意多的单个字符,前置字符可以是正则表达式 |
+ | ERE | 匹配前面正则表达式的 1 个或多个实例 |
? | ERE | 匹配前面正则表达式的 0 个或 1 个实例 |
[...] | BRE&ERE | 方括号表达式,匹配方括号内的任一字符,常配合 - 符使用,表示匹配一 个连续的范围。 ^ 字符作为方括号内的第一个字符表示匹配不在方括号内 的任意字符 |
- | BRE&ERE | 连字符,在方括号表达式中使用,表示连续字符的范围(范围会因 locale 而有所不同,因此不具可移植性) |
{n,m} | ERE | 区间表达式,表示匹配在它前面的字符 n 到 m次。其中,n 与 m 的值必 须介于 0-RE_DUM _MAX(含)之间,后者最小值为255 |
{n} | ERE | 表示匹配在这之前的字符 n 次 |
{n,m} | ERE | 功能同 {n,m} |
{n} | ERE | 功能同{n} |
\ | BRE&ERE | 转义符 |
() | ERE | 匹配位于方括号括起来的正则表达式群 |
( ) | ERE | 将( 与 )\ 之间的模式保存在特殊的“保留空间”中,最多可以存储9个,可以 通过后续的转义序列 \n 来匹配保留空间中的模式 |
\n | ERE | 与 ( ) 结合起来使用,\1匹配第一个子模式、 \2匹配第二个,最多到 \9 |
| | ERE | 匹配位于 | 符号前或后的正则表达式 |
.* 所有字符 |
---|
[] 非字符组内的字符开头的行 |
[a-z] 小写字母 |
[A-Z] 大写字母 |
[a-Z] 小写和大写字母 |
[0-9] 数字 |
< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词 |
> 单词尾 |
注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线
grep: 使用基本元字符集 ^, $, ., *, [], [^], < >, (), {}, +, |
egrep(或grep -E): 使用扩展元字符集 ?, +, { }, |, ( )
\w 所有字母与数字,称为字符[a-zA-Z0-9] ‘l[a-zA-Z0-9]ve‘ ‘l\w*ve‘
\W 所有字母与数字之外的字符,称为非字符 ‘love[a-zA-Z0-9]+‘ ‘love\W+‘
\b 词边界 ‘<love>‘ ‘\blove\b‘
使用 grep 命令对 /etc/passwd 文件进行查找匹配操作:
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# grep r..t /etc/passwd
# grep roo* /etc/passwd
[root@localhost ~]# grep ‘roo*‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
# grep -E roo+ /etc/passwd
# grep -E ro+ /etc/passwd
# grep ^t /etc/passwd
# grep ^t.*h$ /etc/passwd
# grep [Nn]et /etc/passwd
# grep [a-z]c /etc/passwd
# grep [^a-z]c /etc/passwd //取反[^]; ^[]行首
1.使用 {n.m} 区间表达式来匹配指定的次数
# grep 0‘\{3\}‘ /etc/passwd
# grep -E 0{3} /etc/passwd
2.使用 ( ) 保存已匹配的字符,并通过 \n 来引用已保存的匹配字符串
[root@localhost ~]# cat text.txt
root::<asdfafaetweorootweotuasfjl:root
root::<asdfafaetweorootweotuasfjl:root123
rootroot
root
[root@localhost ~]# echo "root2root" >>text.txt
[root@localhost ~]# grep -E ‘(root).*\1$‘ text.txt
root::<asdfafaetweorootweotuasfjl:root
rootroot
root2root
[root@localhost ~]# grep -E ‘(.).*\1‘ text.txt //前后匹配相同字符之间的字符穿
root::<asdfafaetweorootweotuasfjl:root
root::<asdfafaetweorootweotuasfjl:root123
rootroot
root
root2root
类型 | 匹配字符 |
---|---|
[:alnum:] | 数字字符 |
[:alpha:] | 字母字符 |
[:blank:] | 空格与定位符 |
[:cntrl:] | 控制字符 |
[:digit:] | 数字字符 |
[:graph:] | 非空格字符 |
[:lower:] | 小写字母字符 |
[:upper:] | 大写字母字符 |
[:space:] | 空白符 |
[:print:] | 可显示的字符 |
[:punct:] | 标点符号字符 |
[:xdigit:] | 十六进制数字 |
# grep [[:upper:]] /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
原文:https://www.cnblogs.com/BrokenEaves/p/14894695.html