Shell 脚本--------正则表达式的认知

正则表达式

正则表达式分为基础正则表达式与扩展正则表达式,它不是一个工具程序,而是一个字符串处理的标准依据,是使用单个字符串搜索、匹配一系列符合某个语法规则的字符串。

正则表达式的定义

  • 正则表达式又称为正规表达式 、常规表达式
  • 使用字符串来描述、匹配一系列符合某个规则的字符串
  • 正则表达式的组成:
    - 普通字符:大小写字母、数字、标点符号及一些其他符号
    - 元字符:在正则表达式中具有特殊意义的专用字符
  • 支持使用正则表达式的工具:
    - vi 编辑器 :支持基础正则表达式;不支持扩展正则表达式
    - grep :支持基础正则表达式;不支持扩展正则表达式
    - egrep :支持基础正则表达式;支持扩展正则表达式
    - sed :支持基础正则表达式;不支持扩展正则表达式
    - awk :支持基础正则表达式;支持扩展正则表达式

基础正则表达式

  • 基础正则表达式是常用的正则表达式部分
  • 除了普通字符外,常见的元字符:
元字符 作用
\ 转义字符,用于取消特殊符号的含义; 例如:\!、\n
^ 匹配字符的开始位置; 例如:^word 匹配以word 开头的行
$ 匹配字符的结束位置; 例如:word$ 匹配以word 结尾的行
. 匹配除\n(换行)之外的任意一个字符
* 匹配前面的子表达式0次或者多次
[list] 匹配list列表中的一个字符; 例如:[0-9]匹配任一位数字
[^list] 匹配不在 list 列表中的一个字符; 例如: [^0-9]匹配任意一位非数字字符
\ {n\ } 匹配前面的子表达式n次; 例如:[0-9]\ {2\ }匹配两位数字
\ {n,\ } 匹配钱面的子表达式不少于n次; 例如: [0-9]\ {2,\ }表示两位及两位以上数字
\ {n,m\ } 匹配前面的子表达式n到m次; 例如: [a-z]\ {2,3\ }匹配两到三位的小写字母
[] 字符集合;匹配所包含的任意字符; 例如:"[abc]“可以匹配“[abc]”中的"a”
[n1-n2] 字符范围;匹配未包含的任意字符

以 grep 工具,/etc/passwd 文件为例,举些示例:

grep root /etc/passed   :筛选文件中包含root的行

grep ^root /etc/passwd  :筛选出以root开头的行

grep bash$ /etc/passwd  :筛选出以bash结尾的行

grep -v root /etc/passwd  :筛选文件中不包含root的行

grep 'r..d' /etc/passwd  :筛选出 r 和 d 之间有两个字符的行

grep '[^s]bin' /etc/passwd  :筛选 bin 前面不是 s 的行

grep “^$” /etc/passwd  :筛选出空白行,没有空白行的所以没输出

grep 't[es]' /etc/passwd  :筛选包含字符串 te 或 ts 的行

grep '0\ {1,\}' /etc/passwd  :查找数字 0 出现1次以上

grep -e "ntp" -e "root" /etc/passwd  :-e 参数查找多个模式  

“*” 在通配符中表示任意字符。而在正则表达式中表示匹配前面的子表达式0次或者多次

grep 0* /etc/passwd  :这里的0*会匹配所有内容(若是有空白行的文件,甚至包括空白行)
grep 00* /etc/passwd  :这里的00* 匹配至少包含一个 0 的行(第一个 0 必须出现,第二个0可以出现0次或者多次)

扩展正则表达式

  • 扩展正则表达式是对基础正则表达式分扩充深化
  • 常见的元字符
元字符 作用
+ 重复一个或者一个以上的前一个字符
0个或者一个的前一个字符
管道符号 使用或者(or)的方式找出多个字符
() 查找“组”字符
()+ 辨别多个重复的组

以 egrep 工具,/etc/passwd 文件为例,举些示例:

egrep 0+ /etc/passwd  :匹配至少一个 0 的行

egrep '(root|ntp)' /etc/passwd  :匹配包含 root 或 ntp 的行

egrep ro?t /etc/passwd  :匹配 rt 或者 rot 的行

egrep -v '^$|^#' /etc/passed  :过滤文件中的空白行与 # 开头的行,没有空白行与 # 号开头的行,所以没有任何输出

猜你喜欢

转载自blog.csdn.net/XCsuperman/article/details/108184114