Ejercicio 9

This commit is contained in:
perro tuerto 2023-02-24 11:30:00 -08:00
parent c27cc4b41f
commit fbadca49ac
1 changed files with 56 additions and 0 deletions

56
exercises/ex09/ex09.py Normal file
View File

@ -0,0 +1,56 @@
# Exercise 9
# 1. sed command
import re
import sys
import argparse
from pathlib import Path
def check(expression, exp):
error = False
if (
expression[-1] not in "/g"
or exp[0] not in "s"
or len(exp) not in range(3, 5)
or (expression[-1] in "g" and len(exp) != 4)
or (expression[-1] in "/" and len(exp) == 4)
):
error = True
if error:
print(f"sed: expresión «{expression}» inválida")
sys.exit(1)
def parse(expression):
count = 0
exp = list(filter(None, expression.split("/")))
check(expression, exp)
if len(exp) == 3:
count = 1
return {
"rgx": re.compile(exp[1]),
"rep": exp[2],
"n": count,
}
parser = argparse.ArgumentParser()
parser.add_argument("stream", default=sys.stdin, nargs="*")
parser.add_argument(
"-e", "--expression", required=True, type=str, action="append"
)
args = parser.parse_args()
res = ""
for exp in args.expression:
exp = parse(exp)
for stream in args.stream:
if isinstance(args.stream, list):
stream = Path(stream).read_text()
else:
stream = stream.strip()
if res == "":
res = stream
res = re.sub(exp["rgx"], exp["rep"], res, count=exp["n"])
print(res)