sed命令的子进程调用给出错误

时间:2014-08-27 08:42:39

标签: python regex sed subprocess

我有一个包含以下行的文本文件

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")。但他们没有任何效果。 这里可能出现什么问题?

由于

3 个答案:

答案 0 :(得分:3)

'引号是shell使用的分隔符。因为你没有使用shell,所以你不需要在正则表达式周围使用它们:

subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
#                           ^^                                                             ^

此外,我使用raw stringr"....")来阻止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/'