Befehl zum Drucken von Inhalt vor einem Symbol (letztes Zeichen in einer Zeile)

Befehl zum Drucken von Inhalt vor einem Symbol (letztes Zeichen in einer Zeile)

Nehmen wir an, ich habe 3 Dateien:

abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip

Ich möchte nur die Zeichen vor dem letzten Unterstrich (_) drucken.

Die erwartete Ausgabe ist:

abc_def
abc
abc_def_ghi

Antwort1

Sie können Bash mit Parametererweiterung verwenden:

$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi

Antwort2

Mit sed könnten Sie versuchen

sed -E 's/(.*)_.*/\1/'

Beispiel: Kopieren Sie dies in eine Eingabeaufforderung

% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF

Ausgabe

abc_def
abc
abc_def_ghi

Beachten Sie, dass dieser Befehl seddas automatische Drucken des Musterbereichs durch 's beibehält, was bedeutet, dass alle anderen Zeilen, die nicht mit dem Muster übereinstimmen (d. h. keine _'s enthalten), Teil der Ausgabe sind. Wenn Sie diese nicht möchten, können Sie verwenden

sed -n -E 's/(.*)_.*/\1/p'

verwandte Informationen