玩转Linux Shell编程(三)、正则表达式

261 阅读2分钟

前言

本系列目录

  1. Linux Shell和基本指令
  2. Bash shell语法
  3. 正则表达式
  4. 文本处理之grep
  5. 文本处理之sed
  6. 文本处理之awk
  7. Text GUI编程
  8. Tomcat启动脚本分析
  9. gradlew脚本分析

正则简介就不说了,最常用的场景在使用vim、grep的时候,比如要使用vim编辑一个文本,可以通过正则检索字符,下面是元字符的一些列表。

元字符作用
.匹配除了换行符外的任意一个字符,例如:a..d会匹配在a和d这两个字母之间有两个字符的单词
?与前面的0个或1个正则表达式一致,一般匹配单个字符
*前一个字符匹配0次或任意多次 ,例如:a.*d会匹配a和d之间有任意字符
+与前面的多个正则表达式一致。功能类似于*,但必须匹配多个
{N}匹配N次以上
{N,M}至少匹配N次,但不能超过M次
-表示除开始和最后一个以外的目录范围,或表示目录的末尾位置
匹配行首.例如:^hello会匹配以hello开头的行
$匹配行尾.例如:world$会匹配以world结尾的行,^$会匹配空白行
[...]匹配任意字符
\转义符,例如:.$匹配.结尾的行
[^]匹配不是^后面的字符
`、`
扩展方括号作用
[:alpha:]匹配A-Za-z字母字符
[:alnum:]匹配 0–9、A–Z、 a–z组成的字符串。
[:blank:]空格或制表符
[:digit:]0-9数字
[:lower:]a–z小写字母的。
[:space:]任何空白字符:空格、制表符、NL、FF、VT、CR。
[:upper:]A–Z大写字母。

示例

查找指定字符开头

$ cat 1.txt 
abc
abcd
bcde
123456
张三
李四
$ grep -E '^ab' 1.txt 
abc
abcd

查找指定字符结尾

$grep -E '三$' 1.txt 
张三

查找出现指定次数的字符

$ echo "aabbccdd" >1.txt 
$ grep -E 'd{2}' 1.txt 
aabbccdd

查找大、小写字符

(如果在终端中,会高亮出来匹配到的字符)

$ echo "AAaabbccddEE" >1.txt 
$ grep -E '[[:lower:]]' 1.txt 
AAaabbccddEE

$ grep -E '[[:upper:]]' 1.txt 
AAaabbccddEE

匹配两个字且张开头的人名

$ cat 1.txt 
张三
李四
张三三
李四四
张五

$ grep -E '^张.$' 1.txt 
张三
张五

匹配A或者B开头的字符

$ cat 1.txt 
Abc
hdy
Bcd
bcd

$ grep -E  '^[AB]' 1.txt
Abc
Bcd

匹配于此除外

如匹配除了A、B开头的字符,第二个^表示取反。

¥ cat 1.txt 
Abc
hdy
Bcd
bcd

$ grep -E  '^[^AB]' 1.txt
hdy
bcd