Python의 GREP

Manav Narula 2022년1월22일
Python의 GREP

GREP는 정규식을 사용하여 특정 줄에 대한 일반 텍스트 파일을 검색 할 수있는 흥미로운 명령 줄 기능입니다.

정규 표현식은 Python에서 매우 많이 사용되며 문자열이 패턴과 일치하는지 여부를 확인하는 데 사용할 수 있습니다.

Python의re모듈을 사용하면 정규 표현식을 다룰 수 있습니다. 다음 코드에서는 Python에서 GREP를 구현하고 파일에서 특정 패턴을 검색합니다.

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

읽기 모드에서 필요한 파일을 열고 파일을 한 줄씩 반복합니다. 그런 다음re.search()함수를 사용하여 모든 행에서 패턴을 검색합니다. 패턴이 발견되면 라인이 인쇄됩니다.

Python을 사용하여 명령 줄에서이를 구현하는 또 다른 깔끔한 방법이 있습니다. 이 방법은 터미널에서 파일을 실행하는 동안 명령 줄에서 검색 할 정규식과 파일을 지정합니다. 이를 통해 Python에서 GREP를 올바르게 복제 할 수 있습니다.

다음 코드는이를 구현합니다.

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)

sys모듈은 명령 줄에 제공된 모든 인수의 배열을 반환하는argv()함수를 제공합니다.

이 파일을grep.py로 저장하고 터미널에서이 Python 스크립트를 실행하고 다음과 같은 방법으로 필요한 인수를 지정할 수 있습니다.

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

여러 인수로 작업하려면glob모듈을 사용할 수 있습니다.

glob모듈을 사용하면 디렉토리에서 패턴과 일치하는 파일의 경로를 찾을 수 있습니다.

파이썬에서 GREP를 복제하는 데 사용되는 것은 아래에서 볼 수 있습니다.

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,
                )

iglob()함수는 함수로 전달되는 디렉토리의 파일을 반환하는 객체를 만듭니다.

GREP를 단 몇 줄로 구현하는 또 다른 간결한 방법은 다음과 같습니다.

import re
import sys

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

이 방법은 더 정확하고 메모리 효율적이며 터미널에서 직접 이러한 라인을 실행할 수 있습니다.

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
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