0

我有一个包含目录的任意路径mydir

/some/path/to/mydir/further/path/file.ext

我想得到 之后的部分mydir,在这个例子中:

/further/path/file.ext

请注意,子目录的级别也是任意的,所以像这样的路径

/yet/another/long/path/to/mydir/file.ext

也是可能的(结果将是“file.ext”)

mydir应该使用第一次出现的,所以路径

/path/mydir/some/other/path/mydir/path/file.ext

应该导致

/some/other/path/mydir/path/file.ext

如何用 bash 做到这一点?

笔记。假定mydir总是出现在斜线之间。

4

4 回答 4

2

使用外壳参数扩展

$ mydir="/some/path/to/mydir/further/path/file.ext"
$ echo ${mydir#*mydir}
/further/path/file.ext
$ mydir="/path/mydir/some/other/path/mydir/path/file.ext"
$ echo ${mydir#*mydir}
/some/other/path/mydir/path/file.ext
于 2013-11-11T09:38:40.170 回答
2
after=${mydir#*/mydir/}
if [ "$mydir" = "$after" ]; then
  fail_with_error "Path does not contain /mydir/"
fi
after="/$after"

在第 1 行中,#表示之后的子字符串,而 the*是通常的占位符。为了避免像.../mydirectaccess/...我这样的目录,我在mydir. 第 5 行只是在第 1 行删除的斜线之前添加。

于 2013-11-11T09:44:37.647 回答
0

通过 sed。例子:

echo /some/path/to/mydir/further/path/file.ext | sed 's/.*mydir/mydir/'
于 2013-11-11T09:40:11.060 回答
0

使用 bash,您可以执行以下操作:

V=/yet/another/long/path/to/mydir/file.ext
R=${V#*mydir/}
echo $R
file.ext
于 2013-11-11T09:42:26.153 回答