Comando bash para determinar qué cadena de un grupo de cadenas es un prefijo de otra cadena

Comando bash para determinar qué cadena de un grupo de cadenas es un prefijo de otra cadena

Esto es lo que estoy tratando de hacer: tengo una carpeta para repositorios de código y estoy buscando un comando bash que pueda indicar el "directorio raíz de código" del directorio de trabajo actual. Por ejemplo, si actualmente estoy en ~/repositories/my_program/folder1/folder2/, quiero que el comando regrese ~/repositories/my_program/.

Puedo obtener la ruta del directorio de trabajo pwdy una lista de proyectos usando ls ~/repositories/. ¿Cómo puedo determinar cuál de las ~/repositories/<match>cadenas es un prefijo pwd?

Respuesta1

Si solo desea el directorio justo debajo ~/repositories, puede hacer algo como

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

Y solo para imprimir my_program:

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

Para usar ~/en su lugar, intente

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

La idea es hacer coincidir $HOME/repositories/, luego un directorio más (definido como la cadena más larga de no /caracteres: [^/]*).

información relacionada