Bash-Befehl zum Bestimmen, welcher String in einer Gruppe von Strings ein Präfix eines anderen Strings ist

Bash-Befehl zum Bestimmen, welcher String in einer Gruppe von Strings ein Präfix eines anderen Strings ist

Ich versuche Folgendes: Ich habe einen Ordner für Code-Repositorys und suche nach einem Bash-Befehl, der das „Code-Stammverzeichnis“ des aktuellen Arbeitsverzeichnisses angeben kann. Wenn ich mich beispielsweise gerade in befinde, ~/repositories/my_program/folder1/folder2/soll der Befehl zurückgeben ~/repositories/my_program/.

Ich kann den Arbeitsverzeichnispfad pwdund eine Liste der Projekte mithilfe von abrufen ls ~/repositories/. Wie ermittle ich, welcher der ~/repositories/<match>Strings ein Präfix von ist pwd?

Antwort1

Wenn Sie nur das Verzeichnis direkt darunter möchten ~/repositories, können Sie Folgendes tun:

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

Und nur zum Drucken my_program:

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

Versuchen ~/Sie stattdessen

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

Die Idee besteht darin, und dann ein weiteres Verzeichnis abzugleichen $HOME/repositories/(definiert als die längste Zeichenfolge, die nicht aus - /Zeichen besteht: [^/]*).

verwandte Informationen