Wie kann ich unnötige Schrägstriche in einem bestimmten Pfad loswerden?Entfernen Sie unnötige Schrägstriche von einem gegebenen Pfad mit Bash
Beispiel:
p="/foo//////bar///hello/////world"
Ich möchte:
p="/foo/bar/hello/world"
Wie kann ich unnötige Schrägstriche in einem bestimmten Pfad loswerden?Entfernen Sie unnötige Schrägstriche von einem gegebenen Pfad mit Bash
Beispiel:
p="/foo//////bar///hello/////world"
Ich möchte:
p="/foo/bar/hello/world"
/foo/.//bar///hello/./world
gut funktionieren.readlink -f
verwenden, aber das wird auch die Symlinks in diesem Pfad canonicalize, so das Ergebnis hängt von Ihrem Dateisystem und der Pfad geliefert werden, müssen tatsächlich existieren ...., so wird dies nicht für virtuelle Pfade arbeitendie meisten der Zeit, zusätzliche Schrägstriche funktionieren gut, aber in einigen Fällen verursachen sie Probleme (ich hatte einmal das mit einer Rsync-Option nicht richtig funktioniert, wenn der Pfad Schrägstriche verdoppelt hatte) – steabert
Danke für die replys ich weiß, dass der Weg funktioniert ich will das nur aus optischen Gründen
fand ich eine andere Lösung: echo $p | replace '//' ''
Verwendung von reinem Bash:
shopt -s extglob
echo ${p//\/*(\/)/\/}
Dies funktioniert mit mehreren Separatoren und nicht davon ausgehen, den angegebenen Pfad existieren sollte:
p=/foo///.//bar///foo1/bar1//foo2/./bar2;
echo $p | awk '{while(index($1,"/./")) gsub("/./","/"); while(index($1,"//"))
gsub("//","/"); print $1;}'
Aber vereinfacht nicht gut Zeichenfolge mit ".."
Mit realpath:
realpath -sm $p
Parameter:
-m, --canonicalize-missing no components of the path need exist
-s, --strip, --no-symlinks don't expand symlinks
Ihre Eingabe:
p="/foo//////bar///hello/////world"
Befehl die irrelevanten Schrägstriche zu entfernen:
echo $p | tr -s/
Ausgang:
/foo/bar/hello/world
Könnte 'verwenden readlink -m' statt und die Verzeichnis muss nicht existieren. –
@Ryan Li Danke, das ist in der Tat viel besser. Aktualisiert. – phihag
Danke. Ich habe bereits 'sed 's \ \ \ \ // \ // g'' versucht, was nicht so funktioniert, wie ich es möchte. – casper