正则表达式

1.正则表达式介绍

  • 正则表达式是用来过滤文本的模式模板
  • 利用通配符来描述数据流中的一个或者多个字符,因而能够利用不一样的特殊字符来定义特定的数据过滤模式
  • 在Linux中有两种正则表达式引擎:POSIX基础正则表达式(BRE)引擎,POSIX拓展正则表达式(ERE)引擎

2.POSIX基础正则表达式(BRE)引擎,适用于sed和gawk

1.纯文本适配
$echo "This is a test " | sed -n '/test/p'
This is a test

#纯文本适配对大小写敏感
$echo "This is a test " | sed -n '/this/p'
$
$echo "This is a test " | sed -n '/This/p'
This is a test

#不须要单词所有拼完,只要有就能够匹配

#在正则表达式中可使用空格和数字,并且空格和其余字符串并无什么区别
$echo "This is number 1" | sed -n '/ber1/p'
$
$echo "This is number 1" | sed -n '/ber 1/p'
This is number 1

#单词间有两个空格的行匹配正则表达式模式,是找出多余空格的好方法
2.特殊字符 .*[]^${}+?|()
  • 使用特殊字符须要用 \ 来进行转义,就像$(变量)要表达美圆符号的意思须要 $
3.锚字符 ^ $
#  ^ 表明了行首
$echo "this is a test" | sed -n '/^this/p'
$this is a test    #只要单词是在行首,就能匹配到

# $表明了行尾
$echo "this is a test" | sed -n '/test$/p'
$this is a test    #只要单词是在行尾,就能匹配到

# ^$ 表示空白行,利用sed的/^$/d,能够删除文件中的空白行
4.点字符
#点字符能够匹配除换行符以外的任何 单个 字符。
$ echo "this is a nice cat" |  sed -n '/.at/p'
$this is a nice cat

$ echo "this is a nice cat" |  sed -n '/.th/p'
$                                    #由于th前没东西,因此没法匹配
5.字符组
  • 能够利用方括号定义一组字符(英文或者数字),只要出现组中的字符,就能够获得匹配
$echo "The cat is sleeping" | sed -n '/[ch]at/p'
$ The cat is sleeping
$echo "The hat is nice" | sed -n '/[ch]at/p'
$The hat is nice
#
#单个表达式中可使用多个字符组
$echo "yes" | sed -n '/[Yy]e[Ss]/p'
$yes
  • 只要在组里字符前加上^,就能够变成排除这些字符的意思
$echo  "it is three o'clock" | sed -n '/[^at]hree/p'
$            #由于three已经被排除了
6.区间
  • [0-9],就是0到9的所有字符
  • [c-h],就是c到h的所有字符
  • [a-ch-m],就是a到c和h到m的所有字符,这是个不连续区间
7.特殊的字符组
  • 见原书p434,感受用处不是很大
8.星号
  • 字符串后面加星号意味着 该字符 必须出现0次或屡次,和Linux命令行里的意思不太同样
$echo "ik" | sed -n '/ie*k/p'
$ik
  • 利用 .* 能够匹配任意数量的任意字符
  • 星号还能用在字符组上,表示可能出现的屡次字符组和字符区间

3.POSIX扩展正则表达式(ERE)引擎,适用于gawk,不适用于sed

其实就是对基础表达式中星号的细化正则表达式

1.问号
  • 问号,代表前面的字符出现0或者1次
2.加号
  • 加号,代表前面的字符至少出现1次
3.花括号
  • {m},正好出现m次
  • {m,n},至少出现m次,至多出现n次
4. 管道
  • 能够利用管道,用逻辑OR指定正则表达式引擎要用的两个或多个模式
$echo "The cat is sleeping" | gawk '/cat|dog/{print $0}'
$The cat is sleeping
$echo "The dog is sleeping" | gawk '/cat|dog/{print $0}'
$The dog is sleeping
5.表达式分组
  • 用括号将一组字符括起来能够当单个字符用
  • 模式(c|b)a(b|t)会匹配第一组字母的任意组合以及第二组中字母的任意组合
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息