在shell中,如何从完整的文件路径中提取子字符串

时间:2017-06-22 01:53:08

标签: bash shell

如果我有以下变量:

baseFolder="/a/b/c/"
completeFilePath="a/b/c/x/y/z.txt"

如何从completeFilePath中提取子字符串并将输出作为:

x/y/z.txt

baseFolder目录深度可能更多或更少

3 个答案:

答案 0 :(得分:1)

尝试使用awk

解决此问题
$ baseFolder="/a/b/c/"
$ completeFilePath="a/b/c/x/y/z.txt"

$ echo $completeFilePath| awk -v a=$baseFolder '{len=length(a)}{print substr($0,len)}'
x/y/z.txt

简要说明:

  1. len=length(a):获取$baseFolder
  2. 的长度
  3. substr($0,len):从位置$completeFilePath打印len的子字符串

答案 1 :(得分:0)

您可以使用bash参数扩展:

baseFolder="/a/b/c/"
completeFilePath="/a/b/c/x/y/z.txt"

echo "${completeFilePath#$baseFilePath}"

参考:http://wiki.bash-hackers.org/syntax/pe#substring_removal

答案 2 :(得分:0)

这是使用bash参数扩展的一种简单方法:

b="a/b/c/d/"
p="a/b/c/d/x/y/z.txt"

echo "${p/${b}/}"

替换将基本文件夹作为模式,并将其替换为空(删除)。

相关问题