如何获取最后两个“/”符号之间的字符串

如何获取最后两个“/”符号之间的字符串

我正在使用 Bash。我有一些路径字符串,例如/dir0/dir1/dir2/filename.ext,我想在 bash 中提取字符串dir2。您可以假设我想要提取的单词位于最后两个/字符之间。

我正在尝试结合##%但效果不佳。

我尝试过但没有效果的是cut=${${path%/*}##*/}

我怎样才能做到这一点?

解决了但寻找备择方案。我的解决方案如下:

cut=$(tmp=${path%/*}; echo ${tmp##*/})

答案1

使用 bash 和正则表达式:

s="/dir0/dir1/dir2/filename.ext"
[[ $s =~ ([^/]*)/[^/]*$ ]] && echo "${BASH_REMATCH[1]}"

输出:

目录2

答案2

另一种方法是使用 Bash(也是两步)。

IFS=/ read -a array <<<'/dir0/dir1/dir2/filename.ext'
echo ${array[ $(( ${#array[@]}-2 )) ]}
dir2

答案3

您需要分阶段进行解析:-

path=/dir0/dir1/dir2/filename.ext
dir=${path%/*}
lastdir=${dir##*/}

通过尝试结合两种解析操作,您尝试在第二次扩展中使用字符串而不是变量:这是不受支持的。

dir请注意,您可以对和使用相同的变量名lastdir,例如:-

cut=${path%/*}; cut=${cut##*/}

您没有说您的 shell 是bash,但我从您的代码示例中假设了这一点。

答案4

使用 awk 解决:

echo "/dir0/dir1/dir2/filename.ext" | awk -F'/' '{print $(NF-1)}'

上面的输出将是:

dir2

相关内容