bash中的模式匹配扩展


本文作者: jsweibo

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

摘要

本文主要讲述了:

  1. +(pattern-list)
  2. ?(pattern-list)
  3. *(pattern-list)
  4. !(pattern-list)

正文

要使用 bash 中的模式匹配扩展,必须开启名为extglob的 shell 选项。

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

shopt -s extglob

注意:下文中的pattern-list表示一个模式或由|分隔的多个模式列表。

+(pattern-list)

+(pattern-list)匹配任意一个模式 1 次或多次。

示例:+(a|b)匹配以ab开头,其后每个字符都是ab的字符串。例如:abaabbaabbaabbaabb等。

?(pattern-list)

?(pattern-list)匹配任意一个模式 0 次或 1 次。

*(pattern-list)

*(pattern-list)匹配任意一个模式任意次。

@(pattern-list)

@(pattern-list)匹配任意一个模式 1 次。

!(pattern-list)

!(pattern-list)不匹配任意一个模式。

示例:

  • !(*.jpg|*.png)匹配不以.jpg.png结尾的字符串。
  • !(a*|b*).jpg匹配不以ab开头但以.jpg结尾的字符串。
  • *!(.jpg|.png)相当于*。此时!(.jpg|.png)匹配空字符串。

参考资料

本文作者: jsweibo

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


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


支付宝
微信