Skip to content
Advertisement

How to do multiline search and replace with a script?

I’m trying to replace every multiline import inside a Python source file.. So, the source goes like

from XXX import (
   AAA,
   BBB,
)
from YYY import (
   CCC,
   DDD,
   EEE,
   ...
)
...other instructions...

and I’d like to get something like

from XXX import AAA, BBB
from YYY import CCC, DDD, EEE, ...
...other instructions...

I tried to use sed but it looks like it doesn’t support non-greedy matching of the closing parenthesis, so it “eats” the second import.. 🙁
Any hint? Is this impossible with sed? Should I try with another tool?

Advertisement

Answer

Ummm… what’s wrong with Python?

lineIter= iter(aFile)
for aLine in lineIter:
    if aLine.startswith("import"):
        if aLine.endswith("("):
            for aModule in lineIter:
                if aModule.endwith(")"):
                    break
                print "import", aModule.strip()
        else:
            print aLine.stri()
    else:
        print aLine.strip()
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement