我在项目中有几十个文件,我想将six.b("...")
的所有出现更改为b"..."
。我可以使用某种正则表达式bash脚本吗?
答案 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
注意:
它只会考虑/修改与模式匹配的文件
它会制作一个' .bak'它修改的每个文件的副本
它不会处理嵌入式\")
,例如six.b("asdf\")")
,但我不知道这个问题有一个简单的解决方案,而不了解更多关于你操纵的文件。 six.b("")
的结尾是否保证是该行的最后一个")
?等