GREP in Python

Manav Narula 9 Mai 2021
GREP in Python

GREP ist eine interessante Befehlszeilenfunktion, mit der wir Klartextdateien mit regulären Ausdrücken nach bestimmten Zeilen durchsuchen können.

Reguläre Ausdrücke werden in Python sehr häufig verwendet und können verwendet werden, um zu überprüfen, ob eine Zeichenkette mit einem Muster übereinstimmt oder nicht.

Das Modul re in Python ermöglicht es uns, mit regulären Ausdrücken umzugehen. Im folgenden Code werden wir versuchen, GREP in Python zu implementieren und eine Datei nach einem bestimmten Muster zu durchsuchen.

with open("sample.txt", "r") as file:
    for line in file:
        if re.search(pattern, line):
            print(line)

Wir öffnen die gewünschte Datei im Lesemodus und durchlaufen die Datei Zeile für Zeile. Dann verwenden wir die Funktion re.search(), um das Muster in jeder Zeile zu durchsuchen. Wenn das Muster gefunden wird, wird die Linie gedruckt.

Es gibt eine andere gute Möglichkeit, dies in der Befehlszeile mit Python zu implementieren. Diese Methode gibt den regulären Ausdruck und die zu durchsuchende Datei in der Befehlszeile an, während die Datei im Terminal ausgeführt wird. Dadurch können wir GREP in Python ordnungsgemäß replizieren.

Der folgende Code implementiert dies.

import re
import sys

with open(sys.argv[2], "r") as file:
    for line in file:
        if re.search(sys.argv[1], line):
            print(line)

Das Modul sys stellt die Funktion argv() bereit, die ein Array aller in der Befehlszeile angegebenen Argumente zurückgibt.

Wir können diese Datei als grep.py speichern und dieses Python-Skript vom Terminal aus ausführen und die erforderlichen Argumente auf folgende Weise angeben.

python grep.py 'RE' 'file-name'

Wenn wir mit mehreren Argumenten arbeiten möchten, können wir das Modul glob verwenden.

Mit dem Modul glob können wir die Pfade von Dateien finden, die einem Muster in einem Verzeichnis entsprechen.

Die Verwendung beim Replizieren von GREP in Python ist unten zu sehen.

import re
import sys
import glob

for arg in sys.argv[2:]:
    for file in glob.iglob(arg):
        for line in open(file, "r"):
            if re.search(sys.argv[1], line):
                print(
                    line,
                )

Die Funktion iglob() erstellt ein Objekt, das die Dateien im Verzeichnis zurückgibt, die an die Funktion übergeben werden.

Eine andere prägnante Möglichkeit, GREP in nur wenigen Zeilen zu implementieren, ist unten dargestellt.

import re
import sys

map(sys.stdout.write, (l for l in sys.stdin if re.search(sys.argv[1], l)))

Dieser Weg ist präziser und speichereffizienter, und wir können diese Leitungen direkt im Terminal ausführen.

python -c "import re,sys;map(sys.stdout.write,(l for l in sys.stdin if re.search(sys.argv[1],l)))" "RE"
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn