正规表示式是一种符号表示法,用于识别文字模式。 Linux 处理正规表示式的主要程式是 grep 。 grep 搜寻与正规表示式匹配的行,并将结果输送至标准输出。
1. grep 匹配模式
grep 按下述方式接受选项和引数 (其中,regex 表示正规表示式)
grep [options] regex [files]
其中 options 主要为下表:
选项
含义
功能描述
-i
ignore case
忽略大小写
-v
invert match
不匹配匹配的
-l
file-with-match
输出匹配的档名
-L
file-without-match
输出不匹配的档名
-c
count
输出匹配的数目(行数)
-n
number
输出匹配行的同时在前面加上档名及在档名中的行数
-h
no-filename
抑制档名的输出
举例说明
假设有三个档案 del1 、 del2 、 del3 三个档案的内容如下
例子
2. 特殊字元
符号
含义
举例
^
开始标记
“^abc” 满足的例子 abc 、 abcd
^
非(在 [] 内)
“[^abc]” 满足的例子:ddd 、 mpd
$
结束标记
”abc$” 满足的例子 abc 、 mmabc
.
任意字元
“a.c” 满足的例子 abc 、 fapcc
<
匹配单词开始
“
匹配单词结束
“abc>” 满足的例子 abc 、 pmrabc
|
或
“AAA|BBB” 满足的例子 AAA 、 BBBpp
3. 范围
符号
含义
举例
?
匹配前一个字元 0 或 1 次
“abc?” 满足的例子 ab 、 mabcd
*
匹配前一个字元≥0 次
“abc*” 满足的例子 abbb 、 abcdk
+
匹配前一个字元≥1 次
“abc+” 满足的例子 abcd 、 abcccdd
{}
{m} 、 {m,n} 、 {m,} 、 {,n} 分别为匹配前一个字元 m 次、 m 到 n 次、≥m 次、≤n 次
“abc{3,5}” 满足的例子 abcccc 、 abcccccc
[]
[] 内如果不是范围,选其一;是范围的话,范围内选其一
“m[abc]p” 满足的例子 acpd;m[1-9]p 满足的例子 m8pp
()
将候选的所有元素放在 () 内,用|隔开
“a(1|2|3)bc” 满足的例子 a1bc 、 mba3bcd
注意:{} 在郑则表示式中需要转移,而 {}() 不需要。
注意理解 {} 范围的例子:
4. 标准字元类
字元类
释义
[:alnum:]
字母和数字,与 [A-Za-z0-9] 等价
[:word:]
[:alnum:] 加上下划线_
[:alpa:]
字母,与 [A-Za-z] 等价
[:digit:]
数字,与 [0-9] 等价
[:xdigit:]
十六进位制字元,与 [0-9A-Fa-f 等价]
[:blank:]
空格和制表符
[:graph:]
可见字元,靠扩 33~126
[:lower:]
小写字母
[:upper:]
大写字母
[:print:]
可列印字元
[:space:]
空白字元,等价于 [trnvf]
[:punct:]
标点符号
[:cntrl:]
ASCII 控制码,包括字元 0~31 以及 127
例子