Ich habe eine Datei, aus der ich alle Übereinstimmungen extrahieren möchte.
- Jede Übereinstimmung beginnt mit einem Wort und endet mit dem n-ten Mal, wenn ein Zeichen nach jeder Übereinstimmung vorkommt, in diesem Fall beim 2. Mal.
- Fügen Sie in die Ausgabe das Wort und das n-te übereinstimmende Zeichen ein.
- Geben Sie eine Übereinstimmung pro Zeile aus.
- In jeder Zeile kann es eine beliebige Anzahl von Übereinstimmungen geben.
- Jede Übereinstimmung steht in derselben Zeile, d. h. eine Übereinstimmung wird nicht mit CR, LF oder CRLF auf zwei Zeilen aufgeteilt.
Beispiel: Extrahieren Sie alle Übereinstimmungen zwischen „Benutzer“ und der zweiten Übereinstimmung von „-“ nach jedem „Benutzer“:
Eingabedatei:
sample text user=data-no value /) xx- fdfd\n
abcd
abcd user-- example$% user-%&?@:-useruser**-#<>\"-user0-
gg-
--
useruser------data
user-user------data
Ausgabedatei mit Priorisierung der ersten Übereinstimmung (Wort) und anschließender Vorwärtssuche:
user=data-no value /) xx-
user--
user-%&?@:-
useruser**-#<>\"-
useruser--
user-user-
Ausgabedatei mit Priorisierung der n-ten Übereinstimmung (Wort) am Ende und Rückwärtslesen:
user=data-no value /) xx-
user--
user-%&?@:-
user**-#<>\"-
user--
user-user-
Antwort1
Ich verstehe nicht, was „Priorisierung“ in diesem Zusammenhang bedeutet, aber Sie könnten ein einfaches grep verwenden:
$ grep -Eo 'user([^-]*-){2}' file
user=data-no value /) xx-
user--
user-%&?@:-
useruser**-#<>\"-
useruser--
user-user-
([^-]*-){2}
entspricht einer (möglicherweise leeren) Folge von Zeichen ohne Bindestrich, gefolgt von einem Bindestrich, und zwar zweimal.