Bash 命令确定一组字符串中的哪个字符串是另一个字符串的前缀

Bash 命令确定一组字符串中的哪个字符串是另一个字符串的前缀

这就是我想要做的:我有一个代码存储库文件夹,我正在寻找一个 bash 命令,它可以告诉当前工作目录的“代码根目录”。例如,如果我当前位于~/repositories/my_program/folder1/folder2/,我希望命令返回~/repositories/my_program/

我可以使用 获取工作目录路径pwd和项目列表ls ~/repositories/。如何确定哪一个字符串~/repositories/<match>是 的前缀pwd

答案1

如果你只想要下面的目录~/repositories,你可以这样做

$ sed -r "s#($HOME/repositories/[^/]*).*#\1#" <<<$PWD
/home/terdon/repositories/my_program

并且仅打印my_program

$ sed -r "s#$HOME/repositories/([^/]*).*#\1#" <<<$PWD
my_program

要使用~/它,请尝试

$ sed -r "s#$HOME(/repositories/[^/]*).*#~\1#" <<<$PWD
~/repositories/my_program

这个想法是匹配$HOME/repositories/,然后再匹配一个目录(定义为最长的非/字符字符串:[^/]*)。

相关内容