Comando Bash para determinar qual string em um grupo de strings é um prefixo de outra string

Comando Bash para determinar qual string em um grupo de strings é um prefixo de outra string

Aqui está o que estou tentando fazer: tenho uma pasta para repositórios de código e estou procurando um comando bash que possa informar o "diretório raiz do código" do diretório de trabalho atual. Por exemplo, se estou atualmente em ~/repositories/my_program/folder1/folder2/, quero que o comando retorne ~/repositories/my_program/.

Posso obter o caminho do diretório de trabalho pwde uma lista de projetos usando ls ~/repositories/. Como determino qual das ~/repositories/<match>strings é um prefixo de pwd?

Responder1

Se você quiser apenas o diretório abaixo ~/repositories, você pode fazer algo como

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

E só para imprimir my_program:

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

Para usar ~/em vez disso, tente

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

A ideia é combinar $HOME/repositories/, depois mais um diretório (definido como a string mais longa de não- /caracteres: [^/]*).

informação relacionada