使用正则表达式时,需要特别的留意当时环境的语系,否则可能会发现与别人不相同的选项结果。
1.正则表达式中的特殊符号及其含义:
特殊符号 | 代表意义 |
[:alnum:] | 代表英文大小写字符,即0-9,A-Z,a-z |
[:alpha:] | 代表任何英文大小写字符,即A-Z,a-z |
{;blank;} | 代表空格和Tab |
[:cntrl:] | 代表键盘上的控制按键,即包括CR,LF,Tab,Del |
[:digit:] | 代表数字 ,即0-9 |
[:graph:] | 除了空格符(空格与Tab)外的其他所有按键 |
[:lower:] | 代表小写字母,即a-z |
[:print:] | 代表如何可以打印出来的字符 |
[:punct:] | 代表标点符号,即?,!;:#$ |
[:upper:] | 代表大写字符,即A-Z |
[:sapce:] | 任何会产生空白的字符,包括空格键,Tab,CR等 |
[:xdigit:] | 代表十六进制的数字类型,包括0-9,A-F,a-f |
2.grep 的一些基本的用法
grep [-acinv] [--color=auto] '查找字符' filename
参数:
-a : 将binary文件以text文件的方式查找数据
-c:计算找到的‘查找字符’的次数
-i : 不区分大小写
-v : 反向选择,即显示没有‘查找字符’的行
-n : 显示行号
3.设置将查找字符显示高亮的操作
在~./bashrc内加上:alias grep='grep --color=auto'
然后执行命令 source ~./bashrc使其立即生效
4.正则表达式的用法
下面的练习使用‘’c‘’语系
(1)查找特定字符串
a. 显示the字符串
grep -n 'the' regular_expert.txt
b. 反向选择,即显示不带‘the’的行
grep -vn 'the' regular_expert.txt
c. 显示不论大小写的带'the'的行
grep -in 'the' regular_expert.txt
(2)利用中括号[ ]来查找集合字符
a.查找test taste这两个单词的行
grep -n 't[ea]st' regular_expert.txt
中括号里面的只能取其中一个作为值
b. 得到oo前面没有g的行
grep -n '[^g]oo' regular_expert.txt
c.得到oo前面不为小写字符的行
grep -n '[^a-z]oo' regular_expert.txt
或者 grep -n '[^[:lower:]]00' regular_expert.txt
d.得到有数字的行
grep -n '[0-9]' regular_expert.txt
或者 grep -n '[0-9][0-9]*' regular_expert.txt
(3)行首与行尾字符^$
a.得到行首为the的行
grep -n '^the' regular_expert.txt
b.得到行首以小写字符开头的行
grep -n '^[a-z]' regular_expert.txt
或者 grep -n '^[[:lower:]]' regular_expert.txt
c.得到开头不是英文的行
grep -n '^[^a-zA-Z]' regular_expert.txt
d.得到以.结束的行
grep -n '\.$' regular-expert.txt
因为.在正则表达式中有特殊的含义,所以需要转移
e.得到空行
grep -n '^$' regular_expert.txt
(4) 任意一个字符.与重复字符*
小数点与星号在正则表达式中的含义和在通配符中的作用是不一样的,
小数点(.):代表任意一个字符的意思
星号(*): 代表重复前面的字符0遍到无穷多遍
a.得到包含开头是g结束是d,共有四个字符的行
grep -n 'g..d' regular_expert.txt
b.得到包含至少有两个o的字符串的行
grep -n 'ooo*' regular_expert.txt
c.得到包含开头与结尾都是g,但两个g之间仅能存在至少一个o的字符的行
grep -n 'goo*g' regular_expert.txt
d.得到包含以g开头和以g结尾的字符串的行
grep -n 'g.*g' regular_expert.txt
(5)限定连续RE字符范围{}
因为大括号在shell中有特殊的意义,因此使用时用使用转移字符
a.找到两个o的字符串
grep -n 'o\{2\}' regular_expert.txt
b.找到g后面接2个到5个o然后再接一个g的字符
grep -n 'go\{2,5\}g' regular_expert.txt
c.找到g后面接2个及其比上个o然后再接一个g的字符
grep -n'go\{2,\}' regular_expert.txt
5.基础正则表达式字符
RE字符 | 意义 |
---|---|
^word | 以word开头 |
word$ | 以word结尾 |
. | 任意一个字符 |
* | 前面的字符重复0次到无穷多次 |
\ | 转义字符 |
[list] | list中任一个值都可以 |
[n1-n2] | 从n1-n2中的任一个值 |
[^list] | 没有list这些字符 |
\{n.m\} | 重复n-m次 |