Ich habe diese komplexe RegexPerl oneliner in bash: print Spiele von komplexem regexp
/"_outV":([0-9]+),"_inV":([0-9]+),"_label":"([a-z\/]+)",/
und ich brauche eine Datei zu analysieren (die alle auf einer einzigen Zeile ist) und Ausgang nur die angepassten Gruppen wie
print $1 $2 $3
Derzeit ist die einzige fast arbeiten onliner ist
perl -pe 'while(m/"_outV":([0-9]+)\,"_inV":([0-9]+)\,"_label":"([a-z\/]+)\"\,/g){print "$1 $2 $3\n";}'
Aber es endet am Ende, nach den Spielen, auch die gesamte Datei. Wie behebe ich das?
Ich dachte, dass das Entfernen der -p
Option den Trick machen würde, aber es nicht tut.
Einige Beispieldaten helfen würde. Das sieht so aus, als hättest du etwas zu parsen, und du versuchst es zu regexen, was wahrscheinlich der falsche Weg ist, es anzugehen. – Sobrique
Ich fing an, eine Antwort zu schreiben, aber ich muss jetzt gehen. Meine Absicht war zu sagen, dass Sie sich nicht für ein einzeiliges Programm in irgendeiner Sprache bemühen sollten. Zwei Ebenen der Flucht machen alles furchtbar schwierig zu debuggen. Wenn Sie keinen guten Grund haben, einen einzeiligen Befehl zu benötigen, und ich kann mir keinen gültigen vorstellen, dann ist es viel besser als Perl-Programm in einer separaten Datei geschrieben. Alles, was über ein triviales Regex-Muster hinausgeht, sollte die Möglichkeiten des Änderns des Begrenzers und des Modifizierers "/ x" verwenden. Komplexe Einzeiler sind für junge Programmierer, die gerne "Tricks" spielen; sie sind nicht für den professionellen Einsatz, – Borodin
@Borodin Dies ist kaum komplex. – 123