0

我对 bash 中的正则表达式有一个小问题。

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

我想删除 /test/ 之前的所有内容,包括 /test/ 。由于某些原因,“。*”不起作用。

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

如何在 bash reg exp 中选择任何内容?

4

1 回答 1

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
于 2012-09-29T22:26:59.357 回答