解释linux正则表达式获取文件名

时间:2013-06-24 23:30:07

标签: 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

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

2 个答案:

答案 0 :(得分:1)

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

${string##substring}

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

星号在这里是通配符,因此*/表示删除以/结尾的最长子字符串。

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

问题的b部分:

${string%substring}

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

答案 1 :(得分:1)

不是正则表达式

这是BASH parameter expansion。从那个参考:

  

还有用于删除前缀和后缀的扩展。表格   $ {VAR#pattern}从匹配的扩展值中删除任何前缀   模式。删除的前缀是最短的匹配前缀if   你使用双磅符号/哈希标记,最长的匹配前缀是   除去。类似地,$ {VAR%pattern}形式删除了匹配的后缀   (单个百分比表示最短的后缀,双倍表示最长的后缀)。