Linux 正则表达式 Grep Regex

什么是正则表达式?

正则表达式是特殊字符,可帮助搜索数据,匹配复杂模式。正则表达式缩写为 regexpregex

为了便于理解,让我们逐一学习不同类型的正则表达式。

基本正则表达式

一些常用的正则表达式命令是 trsedvigrep。下面列出了一些基本的正则表达式。

符号 描述
. 替换任何字符
^ 匹配字符串的开头
$ 匹配字符串的结尾
* 匹配前一个字符的零个或多个
\ 代表特殊字符
() 正则表达式组
? 恰好匹配一个字符

我们来看一个例子吧。

cat 来查看文件的内容

dishan@vultr:~$ cat sample
apple
bat
ball
ant
eat
pant
people
taste

搜索包含字母 a 的内容。

dishan@vultr:~$ cat sample | grep a
apple
bat
ball
ant
eat
pant
taste

^ 匹配字符串的开头。让我们搜索带有以 a 为开头的内容

dishan@vultr:~$ cat sample | grep ^a
apple
ant

以上命令仅过滤以字符开头的行,并且忽略开头不包含字符 a 的行。

让我们看看另一个例子 -

dishan@vultr:~$ cat sample | grep t
bat
ant
eat
pant
taste

下面的命令使用 $ 仅选择以 t 结尾的行。

dishan@vultr:~$ cat sample | grep t$
bat
ant
eat
pant

区间正则表达式

这些表达式告诉我们字符串中字符的出现次数。他们是

表达 说明
{n} 匹配前面的字符恰好出现 n
{n, m} 匹配前面的字符出现 n 次但不超过 m
{n, } 匹配前一个字符出现 n 次或更多次时

例:

过滤包含字符 p 的所有行

dishan@vultr:~$ cat sample | grep p
apple
pant
people

我们想要检查字符 p 在的字符串中正好出现 2 次。为此,语法将是:

cat sample | grep -E p\{2}

注意:你需要添加 -E 来使用这些正则表达式。

扩展正则表达式

这些正则表达式包含多个表达式的组合。他们之中有一些是:

表达 说明
+ 匹配前一个字符的一次或多次
? 匹配前一个字符零次或一次

例:

搜索所有字符 t

dishan@vultr:~$ cat sample | grep t
bat
ant
eat
pant
taste

假设我们要过滤字符 a 在字符 t 之前的行

我们可以使用命令

cat sample|grep "a\+t"
dishan@vultr:~$ cat sample | grep "a\+t"
bat
eat

括号扩展

括号扩展的语法是大括号 {} 内的序列或逗号分隔的项列表。序列中的起始和结束项由两个点 .. 分隔。

举几个例子:

guru99@virtualBox:- echo {aa, bb,cc,dd} 
aa bb cc dd 
guru99@VirtualBox:-$ echo 0..11) 0 1 2 3 4 5 6 7 8 9 10 11 
guru99@virtualBox:-$ echo {a..Z} abcdefghijklmnopqrstuvw x y z 
guru99@virtualBox:-$ echo a{0..9}b 
aob alb a2b a3ba4b a5b a6b a7ba8b a9b

echo 命令使用大括号扩展创建字符串。

总结:

  • 正则表达式是一组用于检查字符串模式的字符
  • 学习编写脚本的正则表达式很重要
  • 一些基本的正则表达式是:
符号 描述
. 替换任何字符
^ 匹配字符串的开头
$ 匹配字符串的结尾
  • 一些扩展的正则表达式是:
表达 说明
+ 匹配前一个字符的一个或多个匹配项
? 匹配前一个字符的零次或一次
  • 一些区间正则表达式是:
表达 说明
{n} 匹配前面的字符恰好出现 n
{n, m} 匹配前面的字符出现 n 次但不超过 m
{n, } 匹配前一个字符出现 n 次或更多次时
  • 括号扩展用于生成字符串,它有助于创建多个字符串。