基本正则表达式与 shell 中的路径名扩展相同吗?

基本正则表达式与 shell 中的路径名扩展相同吗?

我正在学习正则表达式,它们分为基本和扩展。

基本正则表达式(BRE)使用元字符[ ] ^ $ . *

它在grep命令下工作得很好。但是,当我们使用ls,echo或其他命令时,它也可以很好地工作。(例如,ls -al [abc]*.txt

但是,当我学习有关路径名扩展的部分时,它使用 BRE 的元字符。

所以,我认为它们是一样的。对吗?

答案1

路径名扩展^$、 或没有任何特殊含义.

  1. *BRE 中的字符或组匹配零次或多次重复(因此a*aaaaaa、 …)。*在路径名扩展中匹配任何字符串,与前一个字符无关(所以a*a, ab, a !!! and any ?? string whatsoever, ... -笔记:它与 BRE 所匹配的空字符串不匹配a*)。同样对于?.
  2. in 的否定[]是通过 BRE 中的前导和路径名扩展中的^前导实现的。!
  3. .匹配 BRE 中的任何字符,而.在路径名中没有特殊意义图案。它确实具有重要意义 匹配的,但不在模式本身中。

除了一些表面上的相似之处之外,它们还有很大的不同。有些事情在 BRE 中是可能的,但在路径名匹配中是不可能的(例如,尝试匹配仅由as 组成的文件名)。

相关内容