Wie kann ich grep
von Unix in Perl implementieren? Ich habe versucht, Perls eingebautes grep
zu verwenden. Hier ist der Code, der nicht funktioniert:
Und ich probiere übrigens nur grundlegende grep
-Funktionalität nicht voll aus und zweitens möchte ich keine String-Analyse machen. Ich möchte inbuilt grep
oder eine Funktion von Perl verwenden.
Vielen Dank im Voraus:)
Um ein ganzes Array zu beziehen, verwenden wir @
. Aber um die einzelnen Elemente zu bezeichnen, die skalar sind, verwenden wir $
.
Sie müssen also in diesen Zeilen $
und nicht @
verwenden:
Auch
das
%Vor%sollte
sein %Vor%Das grep in Perl hat die allgemeine Syntax:
%Vor% Er wertet die EXPR
für jedes Element von LIST
aus und gibt den Listenwert zurück, der aus den Elementen besteht, für die der Ausdruck als true ausgewertet wurde.
Die EXPR
sucht in Ihrem Fall nach dem Muster $pattern
im Array @arr
. Um zu suchen, müssen Sie /PATTERN/
ohne /
verwenden. Die Zeichenfolge $pattern
wird für "true" oder "false" ausgewertet.
Natürlich ist die Antwort von codaddict richtig, aber ich möchte einige Anmerkungen hinzufügen:
Sie sollten Ihre Skripts immer mit diesen zwei Zeilen beginnen:
%Vor%Verwenden Sie drei offene Argumente und testen Sie auf Fehler:
%Vor% Und wegen use strict
musst du alle Variablen deklarieren. Dein Skript wird also wie folgt aussehen:
Wenn Ihre Datei groß ist, können Sie vermeiden, sie vollständig im Speicher zu lesen:
%Vor%Da Sie bereits eine Antwort angenommen haben, schreibe ich diese Antwort als Referenz für zukünftige Leser, die ähnliche Probleme suchen, aber nicht genau Ihre:
Wie die Leute bereits geantwortet haben, ist die Methode, Grep mit Perl zu simulieren, der Online-Ansatz. Für die Verwendung von Perl als 'besseres' Grep (und finden und schneiden und ...) empfehle ich das Buch minimal perl und du hast Glück weil das Kapitel für "perl als ein besseres" grep eines der Beispielkapitel ist.
Hier haben Sie weitere Beispiele aus dem Buch:
%Vor%Im letzten Beispiel ist ARGV das aktuelle Dateihandle, und wie bei -l interessiert, Dateien mit der Übereinstimmung zu finden, können Sie den Dateinamen drucken und nach der ersten Übereinstimmung in einer Datei nach der nächsten Datei suchen.
Sie können auch nach Absatz anstatt nach Zeile suchen:
%Vor%Oder finden Sie nur die erste Übereinstimmung:
%Vor%Und schließlich, wenn Sie nach Grep und Perl fragen, denke ich, dass ich ACK erwähnen sollte. 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 habe immer als Befehlszeile verwendet, ich weiß nicht, ob Sie direkt von Ihren Perl-Programmen auf ihre Methoden zugreifen können, aber das wäre sehr nett.
Sie können eine primitive Version von grep
direkt in der Befehlszeile approximieren. Mit der Option -e
können Sie ein Perl-Skript in der Befehlszeile definieren. Die Option -n
umschließt das Skript ungefähr wie folgt: while (<>){ SCRIPT }
.
Eine etwas bessere Annäherung von grep
würde den Dateinamen vor jeder gedruckten Übereinstimmung voranstellen. Beachten Sie, dass dieses Beispiel, wie das oben genannte, nicht die Mühe macht, Dateien zu öffnen. Stattdessen verwenden wir Perls <>
-Konstrukt, um alle Dateien zu durchlaufen, und die $ARGV
-Variable liefert den aktuellen Dateinamen.
Die grundlegende "grep" -Funktionalität ist bereits implementiert. (= ~)
%Vor%