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

1

Veja o que estou tentando fazer: Eu 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 eu estiver atualmente em ~/repositories/my_program/folder1/folder2/ , quero que o comando retorne ~/repositories/my_program/ .

Eu posso obter o caminho do diretório de trabalho com pwd e uma lista de projetos usando ls ~/repositories/ . Como faço para determinar qual das strings ~/repositories/<match> é um prefixo de pwd ?

    
por Nikita Kiryanov 16.11.2014 / 03:39

1 resposta

1

Se você quiser apenas o diretório em ~/repositories , poderá fazer algo como

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

E para imprimir apenas my_program :

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

Para usar ~/ , tente

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

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

    
por 16.11.2014 / 03:53

Tags