Wie Sie bereits eine Antwort akzeptiert, ich schreibe diese Antwort als Referenz für zukünftige Leser für ähnliche Probleme suchen, aber nicht genau Sie:
Da die Menschen bereits beantwortet haben, die Art und Weise grep die Simulation mit Perl soll den Online-Ansatz nutzen. Für die Verwendung von Perl als 'besseres' Grep (und finden und schneiden und ...) Ich empfehle das Buch minimal perl und Sie haben Glück, denn das Kapitel für 'perl as a "better" grep' ist eines der Beispielkapitel.
Hier haben Sie weitere Beispiele aus dem Buch inspiriert:
perl -wnle '/foo/ and print' null.txt # normal grep
perl -wnle '/foo/ and print "$ARGV: $_"' null.txt # grep -H
perl -wnle '/foo/ and print $ARGV and close ARGV' null_1.txt null_2.txt # grep -l
Im letzten Beispiel ARGV ist die aktuelle Dateihandle, und wie bei -l sind Sie interessieren Dateien mit dem Spiel finden Sie die Datei drucken benennen Sie und gehen Sie nach der ersten Übereinstimmung in einer Datei für die nächste Datei.
Sie können auch nach Absatz stattdessen für Zeile suchen:
$ perl -00 -wnl -e '/\bBRIBE\b/i and print;' SenQ.testimony
I knew I'd be in trouble if
I ACCEPTED THE BRIBE!
So I did not.
My minimum bribe is $100k, and she only offered me $50k,
so to preserve my pricing power, I refused it.
Oder nur das erste Spiel finden:
$ perl -00 -wnl -e '/\bBRIBE\b/i and close ARGV;' SenQ.testimony
I knew I would be in trouble if
I ACCEPTED THE BRIBE!
So I did not.
Und schließlich, wenn Sie über grep und Perl fragen, ich glaube, Thay ich sollte Erwähnen Sie ACK. Es implementiert in Perl die grep-Funktionalität und erweitert sie. Dies ist ein wunderbares Werkzeug und als ein Plus können Sie es auch als CPAN-Paket haben. Ich benutze immer als Befehlszeile, ich weiß nicht, ob Sie ihre Methoden direkt von Ihren Perl-Programmen zugreifen können, aber das wäre sehr nett.
- Vielen Dank. – TCM
@coddadict, du hast es großartig gemacht, die Bugs im Code zu beheben, aber diese Frage und der vom Benutzer verwendete Ansatz konvertiert es in ein quasi 'xy-Problem', also ist dies eine dieser Situationen, dass Indoktrination wahrscheinlich nicht vom Thema abweicht. Ich hätte empfohlen, nicht die ganze Datei zur gleichen Zeit zu lesen (er wollte grep simulieren, das linienorientiert ist), ich hätte ihn mit dem grep {} anstelle des grep() empfohlen, nur um eine gute Angewohnheit zu schaffen, und die drei Argumente öffnen. Und es wäre noch ein Plus gewesen, ihm den Online-Ansatz (oder alternativ die Zeile für Zeile mit while) noch weiter zu zeigen. –