diff options
author | Ben Sima <ben@bsima.me> | 2020-04-18 10:16:50 -0700 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2020-04-18 10:16:50 -0700 |
commit | 0771324e14c9602286b4de71c036447d5ad835eb (patch) | |
tree | 46bcfa83d3be0ee310e4f6dd19e98b580189d2ba /replace | |
parent | 864985c5e02f70566f7c9f2326f0a9be7f6300e6 (diff) |
Create replace script
Diffstat (limited to 'replace')
-rwxr-xr-x | replace | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -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) |