regex - 解释用于获取文件名的 linux 正则表达式

标签 regex linux

任何人都可以帮助我解释为什么使用这种方式获取文件名。 例如:文件是:

fileName = "/Users/test/am01/output/output.log"
fileName=${fileName##*/}

然后我们得到了

fileName = output.log

你们能帮我解释一下 ##* 是什么意思吗,我对这个正则表达式很困惑。

另外,还有一个这样的例子:

filename="testdata.done"
echo ${filename%.done}
then we got test data

%是什么意思,我没见过这个正则表达式。

最佳答案

这不是 reqexp,它是普通的旧 bash 魔法。 这guide说:

${string##substring}

从 $string 前面删除 $substring 的最长匹配项。

这里的星号是通配符,所以*/的意思是,删除以/结尾的最长子串。

"/Users/test/am01/output/" 在你的情况下。

问题的 b 部分:

${string%substring}

从 $string 的后面删除 $substring 的最短匹配。

关于regex - 解释用于获取文件名的 linux 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17286795/

相关文章:

php - 单词 null 或双引号中的字符串的正则表达式

在 C 中编译/匹配 POSIX 正则表达式

linux - 程序如何知道它的输出将被重定向?

c++ - 如何使用 Boost 库实现 SortedVector API?

linux - 为什么在 golang、linux 中使用 archive/zip 时文件名会变得困惑?

javascript - 如何在 JavaScript 中将变量传递到 regExp 对象并使其工作

java - 将替换正则表达式转换为 java 算法

regex - 如何转义 CSV 中的双引号?

c linux msync(MS_ASYNC) 刷新顺序

linux - 遇到 Ubuntu .profile 和 .bashrc 问题