Wie extrahiert man eine Zeichenfolge zwischen dem N-ten und M-ten Vorkommen eines Musters?

Wie extrahiert man eine Zeichenfolge zwischen dem N-ten und M-ten Vorkommen eines Musters?

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

basenameund dirnamedruckt 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)" )

verwandte Informationen