匹配字符串

[root@localhost ~]# grep 'root /etc/passwd

[root@localhost ~]# sed -n '/root/'p /etc/passwd

[root@localhost ~]# awk '/root/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/root/' /etc/passwd


匹配包含数字0到9的行

[root@localhost ~]# grep '[0-9]' /etc/passwd

[root@localhost ~]# sed -n '/[0-9]/'p /etc/passwd

[root@localhost ~]# awk '/[0-9]/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/[0-9]/' /etc/passwd


[0-9a-zA-Z]

[root@localhost ~]# grep '[0-9a-zA-Z]' /etc/passwd

[root@localhost ~]# sed -n '/[0-9a-zA-Z]/'p /etc/passwd

# 必须LANG=c

[root@localhost ~]# awk '/[0-9a-zA-Z]/' /etc/passwd

# 必须LANG=c

[root@localhost ~]# awk -F':' '$1~/[0-9a-zA-Z]/' /etc/passwd


[aN]带小写字母a或大写字母N的行

[root@localhost ~]# grep '[aN]' /etc/passwd

[root@localhost ~]# sed -n '/[aN]/'p /etc/passwd

[root@localhost ~]# awk '/[aN]/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/[aN]/' /etc/passwd


^[a-z]以小写字母开头的行

[root@localhost ~]# grep '^[a-z]' /etc/passwd

[root@localhost ~]# sed -n '/^[a-z]/'p /etc/passwd

# 必须LANG=c

[root@localhost ~]# awk '/^[a-z]/' /etc/passwd

# 必须LANG=c

[root@localhost ~]# awk -F':' '$1~/^[a-z]/' /etc/passwd


[^0-9]包含非数字的行

[root@localhost ~]# grep '[^0-9]' /etc/passwd

[root@localhost ~]# sed -n '/[0-9]/'p /etc/passwd

必须LANG=c

[root@localhost ~]# awk '/[^0-9]/' /etc/passwd

必须LANG=c

[root@localhost ~]# awk -F':' '$1~/[^0-9]/' /etc/passwd


[a-z]$以小写字母结尾的行

[root@localhost ~]# grep '[a-z]$' /etc/passwd

[root@localhost ~]# sed -n '/[a-z]$/'p /etc/passwd

必须LANG=c

[root@localhost ~]# awk '/[a-z]$/' /etc/passwd

必须LANG=c

[root@localhost ~]# awk -F':' '$1~/[a-z]$/' /etc/passwd


^$  空白行

[root@localhost ~]# grep '^$' /etc/passwd

[root@localhost ~]# sed -n '/^$/'p /etc/passwd

[root@localhost ~]# awk '/^$/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/^$/' /etc/passwd


r.o  这里的.表示任意一个字符

[root@localhost ~]# grep 'r.o' /etc/passwd

[root@localhost ~]# sed -n '/r.o/'p /etc/passwd

[root@localhost ~]# awk '/r.o/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/r,o/' /etc/passwd


r\.o  这里的.仅仅表示.

[root@localhost ~]# grep 'r\.o' /etc/passwd

[root@localhost ~]# sed -n '/r\.o/'p /etc/passwd

[root@localhost ~]# awk '/r\.o/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/r\.o/' /etc/passwd


r*o  重复*号前面的字符零次或多次

[root@localhost ~]# grep 'r*o' /etc/passwd

[root@localhost ~]# sed -n '/r*o/'p /etc/passwd

[root@localhost ~]# awk '/r*o/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/r*o/' /etc/passwd


r\*o  这里的*仅仅表示*

[root@localhost ~]# grep 'r\*o' /etc/passwd

[root@localhost ~]# sed -n '/r\*o/'p /etc/passwd

[root@localhost ~]# awk '/r\*o/'/etc/passwd

[root@localhost ~]# awk -F':' '$1~/r\*o/'/etc/passwd


r?o  这里的?仅仅表示?

[root@localhost ~]# grep 'r?o' /etc/passwd

[root@localhost ~]# sed -n '/r?o/'p /etc/passwd

[root@localhost ~]# awk '/r?o/' /etc/passwd  用在awk表示重复?前的字符零次或多次

[root@localhost ~]# awk -F':' '$1~/r?o/' /etc/passwd  用在awk表示重复?前的字符零次或一次


r\?o  重复?号前的字符零次或一次

[root@localhost ~]# grep 'r\?o/' /etc/passwd

[root@localhost ~]# sed -n '/r\?o/'p /etc/passwd

[root@localhost ~]# awk '/r\?o/' /etc/passwd  用在awk仅仅表示?

[root@localhost ~]# awk -F':' '$1~/r\?o/' /etc/passwd  用在awk仅仅表示?


a+o  这里的+仅仅表示+

[root@localhost ~]# grep 'a+o' /etc/passwd

[root@localhost ~]# sed -n '/a+o/'p /etc/passwd

[root@localhost ~]# awk '/a+o/' /etc/passwd  用在awk表示重复+号前的字符一次或多次

[root@localhost ~]# awk -F':' '$1~/a+o/' /etc/passwd  用在awk表示重复+号前的字符一次或多次


a\+o  重复+号前面的字符一次或多次

[root@localhost ~]# grep 'a\+o' /etc/passwd

[root@localhost ~]# sed -n '/a\+o/'p /etc/passwd

[root@localhost ~]# awk '/a\+o/' /etc/passwd  用在awk仅仅表示+

[root@localhost ~]# awk -F':' '$1~/a\+o/' /etc/passwd  用在awk仅仅表示+


a.*o  包含字符串以a开头o结尾的行

[root@localhost ~]# grep 'a.*o' /etc/passwd

[root@localhost ~]# sed -n '/a.*o/'p /etc/passwd

[root@localhost ~]# awk '/a.*o/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/a.*o/' /etc/passwd


\(as\)\+  字符串as作为一个整体,被重复一次或多次的行

[root@localhost ~]# grep '\(as\)\+' /etc/passwd

[root@localhost ~]# sed -n '/\(as\)\+/'p /etc/passwd

[root@localhost ~]# awk '/(as)+/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/(as)+/' /etc/passwd


\(as\)\{2,3\}  字符串as作为一个整体,被重复两次或三次的行,不适用于awk

[root@localhost ~]# grep '\(as\)\{2,3\}' /etc/passwd

[root@localhost ~]# sed -n '/\(as\)\{2,3\}/'p /etc/passwd


root\|nologin  包含root或nologin字符串的行

[root@localhost ~]# grep 'root\|nologin' /etc/passwd

[root@localhost ~]# sed -n '/root\|nologin/'p /etc/passwd

[root@localhost ~]# awk '/root|nologin/' /etc/passwd

[root@localhost ~]# awk -F':' '$1~/root|nologin/' /etc/passwd


特别注明:以上正则表达式用在grep和sed中,遇到特殊字符时需要加脱义字符\,如果用在grep -E、egrep、sed -r和awk中,无需加脱义字符,以下五行效果相同

[root@localhost ~]# grep 'root\|nologin' /etc/passwd

[root@localhost ~]# grep -E 'root|nologin' /etc/passwd

[root@localhost ~]# egrep 'root|nologin' /etc/passwd

[root@localhost ~]# sed -rn '/root|nologin/'p /etc/passwd

[root@localhost ~]# awk '/root|nologin/' /etc/passwd