在 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']
我正在使用 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']