参数扩展,在bash中替换

时间:2012-09-29 22:22:44

标签: bash

我在bash中使用正则表达式有一个小问题。

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

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

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

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

1 个答案:

答案 0 :(得分: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