Das Problem ist, dass .
in .*
sowohl Ziffern als auch Nicht-Ziffern abgleicht und so lange wie möglich übereinstimmt - das ist so lange, wie es eine unverbrauchte Ziffer gibt, die übereinstimmen kann die [0-9]
.
Anstatt Zahlen zu extrahieren, löschen Sie einfach Nicht-Ziffern:
%Vor%oder sogar
%Vor% .*
in sed
ist gierig. Und es gibt kein non-greedy
Option AFAIK.
(Sie verwenden müssen [^0-9]*
in diesem Fall für nicht-gieriges Matching. Das funktioniert aber nur einmal, so dass Sie nur 678
ohne 45
erhalten werden.)
Wenn Sie nur sed
verwenden müssen, ist es nicht einfach, das Ergebnis zu erhalten.
Ich empfehle, gnus grep
Wenn Sie wirklich bei sed
bleiben möchten, wäre dies eine von vielen möglichen Antworten.