我有一堆python源文件,我正在转换为3.4语法。如果我使用以下命令:sed -r 's/^print\s(.+$)/print\(\1\)/g' 1.12.py > 1.12a.py
在Cygwin中,它会将所需的括号添加到打印命令,以便在语法上对3.x python正确。但是,当我尝试将其放入bash脚本中时:
#!/bin/bash
# This is a program to remove "from Tkinter import *" occurances from source code
# and to replace it with "from tkinter import *" so it will work in python 3.3, which
# is what I'm using to program the GUI in
sed -i 's/from\ Tkinter/from\ tkinter/g' *.py
# this line is supposed to add parentheses to all print statements since python 2.7 did not
# require parentheses around print statements
for pyFiles in *.py
do
newPref=${pyFiles%.py}
#echo $pyFiles
newName="${newPref}a.py"
sed -r 's/^print\s(.+$)/print\(\1\)/g' $pyFiles > $newName
done
出于某种原因,这会创建所有文件的"" a.py版本,但它不会添加 打印语句的括号,就像我直接执行sed命令时一样。我可能错过了一些明显的东西。任何帮助将非常感激。谢谢。
答案 0 :(得分:0)
将sed命令更改为
sed -r 's/print\s(.+$)/print\(\1\)/g' $pyFiles > $newName
将替换来源
中的每个print
sed -r 's/^print\s(.+$)/print\(\1\)/g' $pyFiles > $newName
^
将正则表达式固定在字符串的开头。也就是说,只有当打印出现在行的开头时才匹配。由于python跟随缩进,它可能不总是从行的开头开始而是由制表符\t