bash中的模式匹配


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/02/05/bash%E4%B8%AD%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D/

摘要

本文主要讲述了:

  1. *
  2. ?
  3. []

正文

除了通配符之外,模式中出现的任何字符都匹配其本身

要在模式中按字面意思匹配通配符,请使用\进行转义或使用引号包裹。

*

*匹配任意长度的字符串,包括空字符。

?

?匹配任意一个字符。

[]

[]匹配集合内任意一个字符。

示例:

  • [012]可以匹配 0-2 之间的任意一个字符
  • [abc]可以匹配 a-c 之间的任意一个字符
  • [ABC]可以匹配 A-C 之间的任意一个字符

-表示范围。范围是闭区间,边界字符被包括在内。示例:[0-9]可以匹配 0-9 之间的任意一个字符。

注意:范围是根据当前区域而定的。

在 C 区域(POSIX 区域)中,[a-dx-z] === [abcdxyz]。但有些区域按照字典顺序(比如:en_US.utf8),此时[a-dx-z] === [aBbCcDdXxYyZz]

1
2
3
4
#!/usr/bin/env bash

# 查看当前的区域设置
locale

除此之外,还可以用字符类来表示范围:

  • [:alnum:] 字母和数字
  • [:alpha:] 字母
  • [:ascii:]
  • [:blank:]
  • [:cntrl:] 控制字符
  • [:digit:] 数字
  • [:graph:]
  • [:lower:] 小写字母
  • [:print:]
  • [:punct:] 标点字符
  • [:space:] 空白字符
  • [:upper:] 大写字母
  • [:word:] 字母、数字和下划线
  • [:xdigit:] 十六进制数字

在使用类的时候要把类放在[]里面,例如:[[:alnum:]]

不匹配

如果[]内的首字符是!^,则表示不匹配集合内任意一个字符。

示例:

  • [!0-9]不匹配 0-9 之间的任意一个字符
  • [![:alpha:]]不匹配字母

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/02/05/bash%E4%B8%AD%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D/


本文对你有帮助?请支持我


支付宝
微信