我需要在Bash(一般来说是Linux shell)中找到一种方法来从给定路径获取基本路径。有一些规则:
ABC
的目录。ABC
包含一个我不知道其名称的子目录。下面我称之为XYZ
。鉴于此路径
/some/absolute/path/foo/ABC/XYZ/bar/path/here
结果应该是:
/some/absolute/path/foo/ABC/XYZ
我遇到的问题归因于XYZ
,因为我不知道,但需要将其保留在返回的路径中。
没有未知的XYZ
我可以这样做:
pwd | sed -e 's/ABC.*/ABC/'
有没有人有解决方案如何在Bash中解决这个问题?谢谢!
答案 0 :(得分:2)
sed -r 's,^(.*/ABC/[^/]+).*,\1,'
答案 1 :(得分:2)
如果你想在纯粹的Bash中这样做:
p='/some/absolute/path/foo/ABC/XYZ/bar/path/here'
m=ABC
t=${p##*$m/} # t=XYZ/bar/path/here
t=${t%%/*} # t=XYZ
new=${p%$m/*}$m/$t # new consists of "/some/absolute/path/foo/", "ABC", "/" and "XYZ"