正则表达式(一)

正则表达式介绍与基础


概念

  正则表达式(Regular Expression)是一个定义搜索模式的字符序列。
  使用**单个字符串**来描述、匹配一系列符合某个**句法规则**的字符串
  在做文字处理或编写程序时,如需要用到查找、替换等功能时,可以使用正则表达式快速达到目的。

特殊符号

内容

参数 含义
[:alnum:] 英文大小写字母及数字
[:alpha:] 英文大小写字母
[:blank:] 空格和tab键
[:cntrl:] 键盘上的控制按键,如CR,LF,TAB,DEL
[:digit:] 数字
[:graph:] 空白字符意外的其他
[:lower:] 小写字母
[:print:] 可以被打印出来的任何字符
[:punct:] 标点符号
[:upper:] 大写字母
[:space:] 任何会产生空白的字符,如空格,tab,CR等
[:xdigit:] 十六进制的数字类型

实例

  1. 使用特使符号查找text.txt文件中的小写字母
grep -n '[[:lower:]]' text.txt
  1. 使用特使符号查找text.txt文件中的数字
grep -n '[[:digit:]]' text.txt

grep命令与正则表达式


参数说明

  • -a:以text档案的方式搜寻binary档案数据
  • -c:计算找到'搜寻字符串'的次数
  • -i:忽略大小写
  • -n:输出行号
  • -v:反向选择,即显示没有'搜寻字符串'内容的行

实例

grep -n 'the' text.txt  #输出有‘the’的行
grep -in 'the' text.txt #输出忽略大小写的‘the’行
grep -vn 'the' text.txt #反向选择,输出没有‘the’的行

字符组匹配

[]可以用来查找数组

  注意:无论[]中包含多少个字符,它都只代表一个字符。
  比如要查找“tast”或者“test”这两个字符串,都是t?st形式,所以我们可以使用[]进行查找:
grep -n 't[ae]st' text.txt

字符组支持使用连字符“-”,表示一个范围

  注意:当“-”前后构成范围时,要求前面字符的码位小于后面字符的码位。

[^]为反向选择字符组

  用于排除后面的字符,使用方式为:[^需要反向选择的字符]
  注意[^]与参数-v的区别,两者都表示反向选择,但如果包含有反向选择的字符的行含有其他字符的话,[^]仍会输出该行,而-v只会输出不含有反向选择的字符的行。

实例

参数 含义
[abc] 表示“a”或“b”或“c”
[0-9] 0-9任意一个数字,等价于[0123456789]
[\u4e00-\u9fa5] 任意一个汉字
[^a1<] 除“a”,“1”,“<”外的其他任意一个字符
^a-z] 除小写字母外的任意一个字符
grep -n '[^a-z]oo' text.txt      # 查找Xoo形式的字符串,要求“oo”前不能有小字母
grep -n '[^[:lower:]]' text.txt  # 等价于上一条
grep -n 'oog' text.txt           # 查找包含“oog”的字符串
grep -n '[^go]oog' text.txt      # 查找包含“oog”的字符串,并且“oog”前不能有“g”或者“o”

行首行尾符

行首符^

grep -n '^the' text.txt   # 查找行首为“the”的行
grep -n '^[A-Z]' text.txt # 查找行首为大写字母的所有行
  注意:行首符^和反向选择[^]的区别,'^[A-Z]'表示以大写字母开头,'[^A-Z]'表示除了大写字母A-Z的所有字符

行尾符$

grep -n 'd$' text.txt   # 查找以字母d为结尾的行
grep -n '^$' text.txt   # 小技巧,将行首和行尾符连用,可以用来查找空行
grep -v '^$' text.txt | grep -v '^#'  # 过滤掉空白行和注释行(以#开头)

任意和重复字符


grep -n 'a.ou.' text.txt   # 查找a?ou?形式的字符

其中小数点'.'表示任意一个字符,一个小数点只能表示一个未知字符

星号* 含义
* 重复前面0个或多个字符
e* 空字符或者一个以上e字符
ee* 第一个e必须存在,第二个e则可以是0个或者多个
eee* 第一个和第二个e必须存在,第三个e可以是0或者多个
ee*e 第一个和第三个e必须存在,第二个e可以是0或者多个

限定连续字符范围{}


{}可限制一个范围区间内重复字符数

grep -n 'ooo*' text.txt       # 查找连续2个o字符的字符串
grep -n 'o\{2\}' text.txt     # {}需要转义字符\
grep -n 'go\{2,5\}g' text.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] 反向搜索,查找不含有l,i,s,t任意一个字符的字符串
找出n到m个前一个RE字符
找出n个以上的前一个RE字符
TO BE CONTINUED...
posted @ 2020-08-15 11:33  Haloya  阅读(165)  评论(0编辑  收藏  举报