我有一个包含以下行的文本文件
PIXEL_SCALE 1.0 # size of pixel in arc
用0.3替换1.0, 我试图从python脚本通过subprocess.call使用sed。 以下sed regex命令可以很好地从shell中运行。
sed -i 's/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/' filename.txt
但是等效的subprocess.call命令给出了以下错误。
subprocess.call(['sed','-i',"'s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/'",'filename.txt'])
sed: -e expression #1, char 1: unknown command: `''
我尝试通过在字符串前加r来将字符串转换为原始字符串,并尝试使用.encode(" UTF-8")。但他们没有任何效果。 这里可能出现什么问题?
由于
答案 0 :(得分:3)
'
引号是shell使用的分隔符。因为你没有使用shell,所以你不需要在正则表达式周围使用它们:
subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
# ^^ ^
此外,我使用raw string(r"...."
)来阻止python对反斜杠转义序列的解释。
答案 1 :(得分:0)
subprocess.call("sed -i 's/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/' filename.txt", shell=True)
有效
答案 2 :(得分:0)
's/(PIXEL_SCALE\s*)[0-9]+[0-9]+/\10.3/'