挣扎。请帮忙。
a="/var/www/test/some/page3.html"
我需要将其转换为
a="some/page3.html"
我正在尝试
a=$(sed "s~/var/www/test/~~g" $a)
但是得到baaaad结果。
答案 0 :(得分:5)
Bash parameter parsing。
无需运行子流程。
$: a="/var/www/test/some/page3.html"
$: echo "${a%/*/*}" # the part you want to get rid of
/var/www/test
$: echo "${a#${a%/*/*}}" # strip that
/some/page3.html
如果您也想摆脱该前导斜线...
$: echo "${a#${a%/*/*}/}"
some/page3.html
答案 1 :(得分:2)
如果要打印最后两个路径部分,请使用此选项:
$ a='/var/www/test/some/page3.html'
$ [[ $a =~ [^/]+/[^/]+$ ]] && a="${BASH_REMATCH[0]}"
$ echo "$a"
some/page3.html
如果要删除前三个路径部分,请使用此选项:
$ a="/var/www/test/some/page3.html"
$ [[ $a =~ ^(/[^/]+){3}/(.*) ]] && a="${BASH_REMATCH[2]}"
$ echo "$a"
some/page3.html
两种方法都想要做的Idk将从该一个样本输入产生预期的输出。在这种情况下,选择您想要做的事情:
$ a="/foo/var/www/test/some/page3.html"
$ [[ $a =~ [^/]+/[^/]+$ ]] && echo "${BASH_REMATCH[0]}"
some/page3.html
$ [[ $a =~ ^(/[^/]+){3}/(.*) ]] && echo "${BASH_REMATCH[2]}"
test/some/page3.html
答案 2 :(得分:1)
a="/var/www/test/some/page3.html"
a=$(basename $(dirname "$a"))/$(basename "$a")
echo "$a"
输出:
some/page3.html