2012-09-29 57 views
0

在bash中有正則表達式的一個微不足道的問題。在bash中替換參數擴展

#!/bin/bash 
FNAME=$1 
echo ${FNAME//.*\/tests\//} 

我想刪除/ test /包括/ test /之前的所有內容。由於某些原因「。*」不起作用。

$ ./eclipse/unittest.sh /foo/tests/bar 
/foo/tests/bar 

如何在bash reg exp中選擇任何東西?

+4

_Parameter expansion_是** **不REGEX –

+1

替代的正確用法運算符將是'$ {FNAME // * \/tests \ /}',但接受的答案更清晰。 – chepner

回答

3

您可以使用#後跟一個模式來刪除一切,直到包括該模式。它會用最短的比賽:如果你想使用最長匹配

function f { 
    echo ${1#*/tests/} 
} 

$ f /foo/tests/bar 
bar 
$ f /foo/tests/bar/tests/last 
bar/tests/last 

,您可以使用##

function f { 
    echo ${1##*/tests/} 
} 

$ f /foo/tests/bar 
bar 
$ f /foo/tests/bar/tests/last 
last 
+0

完美!謝謝。 –