Ich habe eine Datei path.txt mit dem Pfad zu einer Datei (sagen wir einer TXT-Datei):
/Folder/F1/F2/F3/F4/.../Fn/abc.txt
Ich möchte den Pfad extrahieren, d. h. die Zeichenfolge vom Anfang bis zum letzten Vorkommen /
(da die Anzahl der Ordner im Pfad variieren kann).
Ich möchte bekommen:
/Folder/F1/F2/F3/F4/.../Fn
Was wäre die beste Wahl: sed/awk/perl/vi und wie?
Antwort1
Wenn Sie eines der von Ihnen genannten Tools verwenden möchten, können Sie dies mit Folgendem tun sed
:
echo "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" | sed "s/\/[^/]*$//"
sed -i "s/\/[^/]*$//" path.txt
Wenn Sie in Bash sind, können Sie hierfür die Bash-Parametererweiterung verwenden:
path=$(cat path.txt)
echo "${path%/*}"
Und wie erwähnt vonAbonnierenSie können verwenden dirname
.
Antwort2
basename
und dirname
druckt den letzten und alle Teile außer dem letzten eines als Argument angegebenen Dateinamens aus, also:
$ dirname "/Folder/F1/F2/F3/F4/.../Fn/abc.txt"
/Folder/F1/F2/F3/F4/.../Fn
(oder aus einer Datei: dirname "$(< pathname.txt)"
)