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 sed
das 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'