Ejercicio 7
This commit is contained in:
parent
f65c9a0a7c
commit
8bdf5a21d2
|
@ -0,0 +1,59 @@
|
||||||
|
# Exercise 2
|
||||||
|
# 1. grep command
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def loop(args):
|
||||||
|
stderr = False
|
||||||
|
for path in args["paths"]:
|
||||||
|
if not path.exists():
|
||||||
|
print(f"grep: {path}: No existe el fichero o el directorio")
|
||||||
|
stderr = True
|
||||||
|
elif path.is_dir():
|
||||||
|
print(f"grep: {path}: Es un directorio")
|
||||||
|
stderr = True
|
||||||
|
else:
|
||||||
|
grep(path, args)
|
||||||
|
return stderr
|
||||||
|
|
||||||
|
|
||||||
|
def grep(path, args):
|
||||||
|
lines = open(path, "r").readlines()
|
||||||
|
res = []
|
||||||
|
pre = ""
|
||||||
|
if len(args["paths"]) > 1:
|
||||||
|
pre = f"{path}:"
|
||||||
|
for line in lines:
|
||||||
|
tmp = line[:]
|
||||||
|
if args["ignore_case"]:
|
||||||
|
tmp = tmp.lower()
|
||||||
|
if args["extended_regexp"]:
|
||||||
|
res = re.compile(args["extended_regexp"]).search(tmp)
|
||||||
|
else:
|
||||||
|
res = tmp.find(args["query"])
|
||||||
|
if res is not None and res != -1:
|
||||||
|
print(f"{pre}{line}", end="")
|
||||||
|
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('paths', nargs="+", type=Path)
|
||||||
|
parser.add_argument('-i', '--ignore-case', default=False, action="store_true")
|
||||||
|
parser.add_argument('-E', '--extended-regexp', default=False, type=str)
|
||||||
|
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
if sys.argv[1] != "-E" and sys.argv[1] != "-i":
|
||||||
|
query = str(sys.argv[1])
|
||||||
|
del sys.argv[1]
|
||||||
|
else:
|
||||||
|
query = False
|
||||||
|
args = parser.parse_args().__dict__
|
||||||
|
args["query"] = query
|
||||||
|
stderr = loop(args)
|
||||||
|
if stderr:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
sys.exit(1)
|
Loading…
Reference in New Issue