在 sed 命令的 Python 子进程中转义

Escaping in Python subprocess for sed command

我正在使用 Python 在子进程的帮助下执行 sed 删除/替换。不知何故,我没有得到正确的转义次数。这是我的代码:

from subprocess import call

remover = ["sed", "-i", "'1d'", "file"]
call(remover)

removeq = ["sed", "-i", "'s/\"//g'", "file"]
call(removeq)

这两个任务都会产生错误消息:

sed: -e expression #1, char 1: unknown command: `''

第一个列表中的'符号需要转义多少次,最后一个列表中的"符号需要转义多少次?我试了一次,两次,三次,都没有用。也没有隐藏的角色可能会搞砸。

有什么建议吗?

修复引用机制:

sed -i 's/\"//g' file

应该是:

sed -i 's/"//g' file

您还可以使用 shlex 库。 来自口译员的例子:

>>> import  shlex
>>> cmd = "sed -i '1d' file"
>>> shlex.split(cmd)
['sed', '-i', '1d', 'file']
>>> cmd = """sed -i 's/"//g' file"""
>>> shlex.split(cmd)
['sed', '-i', 's/"//g', 'file']