正则表达式特殊符号
一些特殊符号的表示

[:alnum:]代表英文大小写字母及数字
[:alpha:]代表英文大小写字母
[:blank:]代表空格和 tab 键
[:cntrl:]键盘上的控制按键,如 CR,LF,TAB,DEL
[:digit:]代表数字
[:graph:]代表空白字符以外的其他
[:lower:]小写字母
[:print:]可以被打印出来的任何字符
[:punct:]代表标点符号
[:upper:]代表大写字符
[:space:]任何会产生空白的字符如空格,tab,CR 等
[:xdigit:]代表16进制的数字类型
grep查找
grep命令可以使用正则表达式搜索文本,并把匹配的行打印出来,其常用方法如下:

grep [-acinv] [–color=auto] ‘搜寻字符串’ filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字符串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
–color=auto :可以将找到的关键词部分加上颜色的显示

case1

查找特定的字符串

grep -n ‘the’ regular_express.txt # 查找’the’ 字符串
1
case2

字符组匹配,[]中包含的任意一个字符,只能是一个,字符组支持”-“连字符来表示一个范围,[^ …] 是排除型字符组,用来排除后面的字符

[abc] :表示“a”或“b”或“c”
[0-9] :表示 0~9 中任意一个数字,等价于[0123456789]
[\u4e00-\u9fa5] :表示任意一个汉字
[^a1<] :表示除“a”、“1”、“<”外的其它任意一个字符
[^a-z] :表示除小写字母外的任意一个字符

grep -n ‘t[ae]st’ regular_express.txt # 查找“tast”或者“test”两个字符串
grep -n ‘[^#]’ regular_express.txt #查找不包含“#”的字符串
grep -n ‘[^g]oog’ regular_express.txt # 查找”oog”,但是不查找”goog”
grep -n ‘[^go]oog’regular_express.txt# 查找”oog”,但是不查找”goog”和”ooog”
grep -n ‘[[:lower:]]’ regular_express.txt # 查找小写字母

case3

行首符^,行尾符$,具体应用如下

grep -n ‘^the’ regular_express.txt # 查找行首为”the”的所有行
grep -n ‘^[A-Z]’ regular_express.txt # 查找行首为大写字母的所有行
grep -n ‘[^A-Z]’ regular_express.txt # 查找除了大写字母以外的所有字符,注意和上面区分
grep -n ‘d’ regular_express.txt # 查找以”d”结尾的所有行  
grep -n ‘^
’ regular_express.txt # 查找以”d”结尾的所有行  grep -n ‘^
’ regular_express.txt # 查找空行

case4

grep的反向选择和管道线联合应用

grep -v ‘^$’ /etc/insserv.conf | grep -v ‘^#’ # 先过滤掉空白行,然后过滤掉注释行(以#开头)
1
case5

小数点”.”表示任意一个字符,星号”*”表示重复的字符

grep -n ‘a.ou.’ regular_express.txt # 查找a?ou?类型的字符

*(星号):代表重复前面0个或者多个字符。
e*: 表示具有空字符或者一个以上e字符。
ee*,表示前面的第一个e字符必须存在。第二个e则可以是0个或者多个e字符。
eee*,表示前面两个e字符必须存在。第三个e则可以是0个或者多个e字符。
ee*e :表示前面的第一个与第三个e字符必须存在。第二个e则可以是0个或者多个e字符。

case6

大括号{}可以限定一个范围区间重复的字符数,注意,必须用转义字符来表示这个大括号,即为{} ,否则出错。

grep -n ‘o{2}’ regular_express.txt # 查找连续的两个”o”
grep -n ‘go{2,5}g’ regular_express.txt # 查找g后面接2到5个o,然后再接g的字符串

小结

^word 表示带搜寻的字符串(word)在行首
word$ 表示带搜寻的字符串(word)在行尾
.(小数点) 表示1个任意字符
\ 表示转义字符,在特殊字符前加\会将特殊字符意义去除
* 表示重复0到无穷多个前一个RE(正则表达式)字符
[list] 表示搜索含有l,i,s,t任意字符的字符串
[n1-n2] 表示搜索指定的字符串范围,例如[0-9] [a-z] [A-Z]等
[^list] 表示反向字符串的范围,例如[^0-9]表示非数字字符,[^A-Z]表示非大写字符范围
{n,m} 表示找出n到m个前一个RE字符
{n,} 表示n个以上的前一个RE字符

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐