#! /usr/bin/env python # Update a bunch of files according to a script. # The input file contains lines of the form <filename>:<lineno>:<text>, # meaning that the given line of the given file is to be replaced # by the given text. This is useful for performing global substitutions # on grep output: import os import sys import re pat = '^([^: \t\n]+):([1-9][0-9]*):' prog = re.compile(pat) class FileObj: def __init__(self, filename): self.filename = filename self.changed = 0 try: self.lines = open(filename, 'r').readlines() except IOError, msg: print '*** Can\'t open "%s":' % filename, msg self.lines = None return print 'diffing', self.filename def finish(self): if not self.changed: print 'no changes to', self.filename return try: os.rename(self.filename, self.filename + '~') fp = open(self.filename, 'w') except (os.error, IOError), msg: print '*** Can\'t rewrite "%s":' % self.filename, msg return print 'writing', self.filename for line in self.lines: fp.write(line) fp.close() self.changed = 0 def process(self, lineno, rest): if self.lines is None: print '(not processed): %s:%s:%s' % ( self.filename, lineno, rest), return i = eval(lineno) - 1 if not 0 <= i < len(self.lines): print '*** Line number out of range: %s:%s:%s' % ( self.filename, lineno, rest), return if self.lines[i] == rest: print '(no change): %s:%s:%s' % ( self.filename, lineno, rest), return if not self.changed: self.changed = 1 print '%sc%s' % (lineno, lineno) print '<', self.lines[i], print '---' self.lines[i] = rest print '>', self.lines[i], def main(): if sys.argv[1:]: try: fp = open(sys.argv[1], 'r') except IOError, msg: print 'Can\'t open "%s":' % sys.argv[1], msg sys.exit(1) else: fp = sys.stdin curfile = None while 1: line = fp.readline() if not line: if curfile: curfile.finish() break n = prog.match(line) if n < 0: print 'Funny line:', line, continue filename, lineno = prog.group(1, 2) if not curfile or filename <> curfile.filename: if curfile: curfile.finish() curfile = FileObj(filename) curfile.process(lineno, line[n:]) if __name__ == "__main__": main()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
.beer.pyo.40009 | File | 703 B | 0644 |
|
.eqfix.pyo.40009 | File | 4.52 KB | 0644 |
|
.fact.pyo.40009 | File | 1.14 KB | 0644 |
|
.find-uname.pyo.40009 | File | 1.47 KB | 0644 |
|
.from.pyo.40009 | File | 749 B | 0644 |
|
.lpwatch.pyo.40009 | File | 2.54 KB | 0644 |
|
.makedir.pyo.40009 | File | 732 B | 0644 |
|
.markov.pyo.40009 | File | 3.93 KB | 0644 |
|
.mboxconvert.pyo.40009 | File | 3.17 KB | 0644 |
|
.morse.pyo.40009 | File | 4.33 KB | 0644 |
|
.newslist.pyo.40009 | File | 7.55 KB | 0644 |
|
.pi.pyo.40009 | File | 921 B | 0644 |
|
.pp.pyo.40009 | File | 2.28 KB | 0644 |
|
.primes.pyo.40009 | File | 921 B | 0644 |
|
.queens.pyo.40009 | File | 2.95 KB | 0644 |
|
.script.pyo.40009 | File | 1.21 KB | 0644 |
|
.unbirthday.pyo.40009 | File | 2.93 KB | 0644 |
|
.update.pyo.40009 | File | 2.69 KB | 0644 |
|
README | File | 1009 B | 0644 |
|
beer.py | File | 459 B | 0755 |
|
beer.pyc | File | 703 B | 0644 |
|
beer.pyo | File | 703 B | 0644 |
|
eqfix.py | File | 6.16 KB | 0755 |
|
eqfix.pyc | File | 4.52 KB | 0644 |
|
eqfix.pyo | File | 4.52 KB | 0644 |
|
fact.py | File | 1.11 KB | 0755 |
|
fact.pyc | File | 1.14 KB | 0644 |
|
fact.pyo | File | 1.14 KB | 0644 |
|
find-uname.py | File | 1.18 KB | 0755 |
|
find-uname.pyc | File | 1.47 KB | 0644 |
|
find-uname.pyo | File | 1.47 KB | 0644 |
|
from.py | File | 874 B | 0755 |
|
from.pyc | File | 749 B | 0644 |
|
from.pyo | File | 749 B | 0644 |
|
lpwatch.py | File | 2.77 KB | 0755 |
|
lpwatch.pyc | File | 2.54 KB | 0644 |
|
lpwatch.pyo | File | 2.54 KB | 0644 |
|
makedir.py | File | 510 B | 0755 |
|
makedir.pyc | File | 732 B | 0644 |
|
makedir.pyo | File | 732 B | 0644 |
|
markov.py | File | 3.51 KB | 0755 |
|
markov.pyc | File | 3.93 KB | 0644 |
|
markov.pyo | File | 3.93 KB | 0644 |
|
mboxconvert.py | File | 3.11 KB | 0755 |
|
mboxconvert.pyc | File | 3.17 KB | 0644 |
|
mboxconvert.pyo | File | 3.17 KB | 0644 |
|
morse.py | File | 4.21 KB | 0755 |
|
morse.pyc | File | 4.33 KB | 0644 |
|
morse.pyo | File | 4.33 KB | 0644 |
|
newslist.doc | File | 2.36 KB | 0755 |
|
newslist.py | File | 11.17 KB | 0755 |
|
newslist.pyc | File | 7.55 KB | 0644 |
|
newslist.pyo | File | 7.55 KB | 0644 |
|
pi.py | File | 888 B | 0755 |
|
pi.pyc | File | 921 B | 0644 |
|
pi.pyo | File | 921 B | 0644 |
|
pp.py | File | 3.73 KB | 0755 |
|
pp.pyc | File | 2.28 KB | 0644 |
|
pp.pyo | File | 2.28 KB | 0644 |
|
primes.py | File | 603 B | 0755 |
|
primes.pyc | File | 921 B | 0644 |
|
primes.pyo | File | 921 B | 0644 |
|
queens.py | File | 2.19 KB | 0755 |
|
queens.pyc | File | 2.95 KB | 0644 |
|
queens.pyo | File | 2.95 KB | 0644 |
|
script.py | File | 962 B | 0755 |
|
script.pyc | File | 1.21 KB | 0644 |
|
script.pyo | File | 1.21 KB | 0644 |
|
unbirthday.py | File | 3.07 KB | 0755 |
|
unbirthday.pyc | File | 2.93 KB | 0644 |
|
unbirthday.pyo | File | 2.93 KB | 0644 |
|
update.py | File | 2.69 KB | 0755 |
|
update.pyc | File | 2.69 KB | 0644 |
|
update.pyo | File | 2.69 KB | 0644 |
|