From 0771324e14c9602286b4de71c036447d5ad835eb Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Sat, 18 Apr 2020 10:16:50 -0700 Subject: Create replace script --- replace | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 replace (limited to 'replace') diff --git a/replace b/replace new file mode 100755 index 0000000..ea14088 --- /dev/null +++ b/replace @@ -0,0 +1,30 @@ +#!/usr/bin/env python +""" +replace stuff in a file or files +""" +import argparse +import difflib +import glob +import fileinput +import sys + +cli = argparse.ArgumentParser(description=__doc__) +cli.add_argument( + "-v", "--verbose", action="store_true", help="print diffs for every replacement" +) +cli.add_argument("old", type=str, help="target string") +cli.add_argument("new", type=str, help="replacement string") +cli.add_argument( + "files", nargs="*", metavar="FILE", help="files to operate on, or omit for stdin", +) +args = cli.parse_args() + +differ = difflib.Differ() + +for line in fileinput.input(files=args.files, inplace=True): + replacement = line.replace(args.old, args.new) + print(replacement, end="") + if args.verbose and args.old in line: + diff = list(differ.compare([line], [replacement])) + sys.stderr.write(f"{fileinput.filename()}:{fileinput.lineno()}:\n") + sys.stderr.writelines(diff) -- cgit v1.2.3