Bash删除变量

时间:2019-05-16 19:03:33

标签: bash variables sed

挣扎。请帮忙。

a="/var/www/test/some/page3.html"

我需要将其转换为

a="some/page3.html"

我正在尝试

a=$(sed "s~/var/www/test/~~g" $a)

但是得到baaaad结果。

3 个答案:

答案 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