假设我在不同的目录中有三个bash文件:
/a/b/c/d/e/f/script1.sh
/a/bb/c/d/script2.sh
/aa/b/c/d/e/f/g/h/script3.sh
如果我调用$(pwd),我会得到当前目录的路径。有没有办法以某种方式“裁剪”这条路径,直到某个文件夹?在下面的例子中显示了某个文件夹是否会被称为“c”:
感谢您的帮助
答案 0 :(得分:2)
我假设你想要的是参数扩展:
$ path="/a/b/c/d/e/f/script1.sh"
$ echo "${path#*/c}"
/d/e/f/script1.sh
反转:
$ path="/a/b/c/d/e/f/script1.sh"
$ echo "${path%/d*}"
/a/b/c
问候!
答案 1 :(得分:1)
Bash正则表达式:
#!/bin/bash
[[ "$PWD" =~ (^/[^/]+/[^/]+/[^/]+)(.*) ]] && echo ${BASH_REMATCH[1]}
它返回路径的前三个组件(如果有三个组件)。您还可以设置路径tp,例如$pwd
和:
$ pwd=/a/b/c/d/e/f/script1.sh
$ [[ "$pwd" =~ (^/[^/]+/[^/]+/[^/]+)(.*) ]] && echo ${BASH_REMATCH[1]}
/a/b/c
另外,请注意以下@ 123的评论;这是正确的方式,我的思绪已经消失了。谢谢,先生。
答案 2 :(得分:1)
使用cut命令:
echo '/a/b/c/d/e/f/script1.sh' | cut -d '/' -f 1-4
echo '/a/bb/c/d/script2.sh' | cut -d '/' -f 1-4
echo '/aa/b/c/d/e/f/g/h/script3.sh' | cut -d '/' -f 1-4
答案 3 :(得分:0)
试试这个:
[sahaquiel@sahaquiel-PC h]$ pwd
/home/sahaquiel/a/b/c/d/e/f/g/h
[sahaquiel@sahaquiel-PC h]$ pwd | cut -d"/" -f1-6
/home/sahaquiel/a/b/c
答案 4 :(得分:0)
考虑到这样的情况:
$ pwd
/a/b/c/d/cc/e/c/f
$ FOLDER=c
您可以在$PWD
变量上使用shell parameter expansion,如下所示:
$ echo "${PWD%/${FOLDER}/*}/${FOLDER}"
/a/b/c/d/cc/e/c
$ echo "${PWD%%/${FOLDER}/*}/${FOLDER}"
/a/b/c
区别在于单{或%
。对于%
,扩展的结果是具有最短匹配模式的参数(${PWD}
)的扩展值。使用%%
,它将是最长的匹配模式。
请确保使用正斜杠将${FOLDER}
变量括起来,否则它可能会匹配名称中包含匹配项的目录(如本例中的目录cc
)< / p>
因为您想要包含您要查找的文件夹,所以它包含在字符串末尾,前缀为正斜杠。