【发布时间】:2014-12-22 10:47:05
【问题描述】:
在 bash 中,有几种有用的字符串操作模式,例如从字符串的开头/结尾删除最短/最长的子字符串:
${var#substring}
${var##substring}
${var%substring}
${var%%substring}
然后还有替换模式,它从字符串的任何部分替换子字符串:
${var/substring/replacement}
这样做的问题是它是贪婪的并且总是替换最长的匹配。例如,如果我有一个像 /a/b/foo-bar/x/y/z 这样的目录名称,并且我想将任何以 foo- 开头的子目录名称替换为 baz,那么它不会像我预期的那样工作.我希望结果是/a/b/baz/x/y/z。我尝试了以下命令:
${PWD/\/foo-*\///baz/}
本例中的结果是/a/b/baz/z,因为该模式匹配以/foo- 开头并以/ 结尾的最长子字符串。有什么方法可以在不调用sed 或任何其他外部字符串操作程序的情况下获得正确的结果?
【问题讨论】: