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/,然後再匹配一個目錄(定義為最長的非/字元字串:[^/]*)。

相關內容