Linux 正则表达式 Grep Regex
什么是正则表达式?
正则表达式是特殊字符,可帮助搜索数据,匹配复杂模式。正则表达式缩写为 regexp
或 regex
。
为了便于理解,让我们逐一学习不同类型的正则表达式。
基本正则表达式
一些常用的正则表达式命令是 tr
,sed
,vi
和 grep
。下面列出了一些基本的正则表达式。
符号 | 描述 |
---|---|
. |
替换任何字符 |
^ |
匹配字符串的开头 |
$ |
匹配字符串的结尾 |
* |
匹配前一个字符的零个或多个 |
\ |
代表特殊字符 |
() |
正则表达式组 |
? |
恰好匹配一个字符 |
我们来看一个例子吧。
用 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 次或更多次时 |
- 括号扩展用于生成字符串,它有助于创建多个字符串。