从多个文件中删除six.b.

时间:2016-08-24 19:38:49

标签: python bash

我在项目中有几十个文件,我想将six.b("...")的所有出现更改为b"..."。我可以使用某种正则表达式bash脚本吗?

2 个答案:

答案 0 :(得分:1)

完全可以在Python中使用,但我首先要备份我的项目树,然后:


import re
import os

indir = 'files'

for root, dirs, files in os.walk(indir):
    for f in files:
        fname = os.path.join(root, f)
        with open(fname) as f:
            txt = f.read()
        txt = re.sub(r'six\.(b\("[^"]*"\))', r'\1', txt)
        with open(fname, 'w') as f:
            f.write(txt)
        print(fname)


答案 1 :(得分:1)

一个相对简单的bash解决方案(将* .foo更改为* .py或任何适合您情况的文件名模式):

#!/bin/bash

export FILES=`find . -type f -name '*.foo' -exec egrep -l 'six\.b\("[^\"]*"\)' {} \; 2>/dev/null`
for file in $FILES
do
    cp $file $file.bak
    sed 's/six\.b(\(\"[^\"]*[^\\]\"\))/b\1/' $file.bak > $file
    echo $file
done

注意:

  1. 它只会考虑/修改与模式匹配的文件

  2. 它会制作一个' .bak'它修改的每个文件的副本

  3. 它不会处理嵌入式\"),例如six.b("asdf\")"),但我不知道这个问题有一个简单的解决方案,而不了解更多关于你操纵的文件。 six.b("")的结尾是否保证是该行的最后一个")?等