繁体   English   中英

重击:剪切当前路径,直到某个文件夹

[英]Bash: Cut current path until a certain folder

可以说我在不同目录中有三个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”的示例:

  • 对于script1.sh,我想使用以下路径:/ a / b / c
  • 对于script2.sh,我想使用以下路径:/ a / bb / c
  • 对于script3.sh,我想使用以下路径:/ aa / b / c

谢谢您的帮助

我假设您想要的是参数扩展:

$ 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

问候!

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的评论; 那是正确的方法,我的想法不对。 谢谢你,先生。

使用剪切命令:

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

尝试这个:

[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

给定这样的情况:

$ pwd
/a/b/c/d/cc/e/c/f

$ FOLDER=c

您可以在$PWD变量上使用shell参数扩展 ,如下所示:

$ echo "${PWD%/${FOLDER}/*}/${FOLDER}"
/a/b/c/d/cc/e/c

$ echo "${PWD%%/${FOLDER}/*}/${FOLDER}"
/a/b/c

区别在于%% 使用%扩展的结果是具有最短匹配模式的参数( ${PWD} )的扩展值。 使用%% ,它将是最长的匹配模式。

只需确保将${FOLDER}变量括在正斜杠中即可,因为否则它可能会匹配名称中包含匹配项的目录(例如本例中的目录cc

因为您想包含要查找的文件夹,所以它包含在字符串的末尾,并带有正斜杠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM