awk extrahieren von mehreren Gruppen aus jeder Zeile
Wie führe ich die Aktion auf alle entsprechenden Gruppen, wenn das Muster passt mehrfach in einer Zeile?
Um zu veranschaulichen, will ich suchen für /Hello! (\d+)/
und verwenden Sie die zahlen, zum Beispiel, drucken Sie Sie aus oder die Summe davon, also für die Eingabe
abcHello! 200 300 Hello! Hello! 400z3
ads
Hello! 0
Wenn ich beschlossen, drucken Sie Sie aus, würde ich erwarten, dass die Ausgabe von
200
400
0
- Für Googler: beachten Sie, dass mit
gawk
, aka. "GNU awk", können Sie tatsächlich tun, was der Titel sagt (nicht die Frage) in einer Zeile (z.B. via. Verrohrung):| gawk -v RS='' '{ print gensub(/()()/, "\\1\\2", "g"); }'
😀 Diese unterstützt multi-line (wegen der-v RS=''
) und passendem sub-Gruppen (durch die Verwendung von gawk istgensub
)!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine einfache syntax, und jedes awk (nawk, mawk, gawk, usw.) können mit diesem.
Dies ist
gawk
syntax. Es funktioniert auch für Muster, wenn es keinen festen text, der so arbeiten kann, wie eine Datensatz-Trennzeichen und nicht mit über Zeilenwechsel:sub
am Ende macht einen großen Unterschied! Leider dauerte es einige Zeit, um es auszuprobieren... vielen Dank!GNU awk
Gibt es keine gawk Funktion zu entsprechen, das gleiche Muster mehrfach in einer Zeile. Es sei denn, Sie wissen genau, wie oft das Muster wiederholt.
Haben, haben Sie zu Durchlaufen "manuell" auf alle Spiele in der gleichen Linie. Für dein Beispiel-input, wäre es:
Wenn das Muster zutreffen soll über einen Zeilenvorschub, die Sie ändern müssen, um den input record separator - RS