typestar

grep_lite.py en Python

Un grep mínimo: hallar líneas que coinciden con un patrón en varios archivos.

"""Un grep mínimo: busca un patrón y muestra las líneas que coinciden."""
import sys
from pathlib import Path


def buscar_en_archivo(ruta, aguja):
    coincidencias = []
    try:
        text = ruta.read_text(errors="ignore")
    except OSError:
        return coincidencias
    for numero, linea in enumerate(text.splitlines(), start=1):
        if aguja in linea:
            coincidencias.append((numero, linea.strip()))
    return coincidencias


def principal():
    if len(sys.argv) < 3:
        print("uso: grep_lite.py PATRÓN RUTA [RUTA...]")
        raise SystemExit(1)
    aguja = sys.argv[1]
    total = 0
    for arg in sys.argv[2:]:
        raiz = Path(arg)
        archivos = raiz.rglob("*") if raiz.is_dir() else [raiz]
        for ruta in archivos:
            if not ruta.is_file():
                continue
            for numero, linea in buscar_en_archivo(ruta, aguja):
                print(f"{ruta}:{numero}: {linea}")
                total += 1
    print(f"{total} líneas coinciden")


if __name__ == "__main__":
    principal()

Cómo funciona

  1. Lee el patrón y las rutas desde sys.argv.
  2. rglob recorre directorios; los archivos se escanean línea por línea.
  3. Imprime coincidencias ruta:linea: y un conteo final.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
37
Caracteres a escribir
860
Tokens
218
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 125 segundos.

Escribe este fragmento

Paso 4 de 5 en Bis; paso 71 de 72 en Fundamentos del lenguaje.

← Anterior Siguiente →