Команда 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/, а затем еще один каталог (определяемый как самая длинная строка не- /символов: [^/]*).

Связанный контент