【发布时间】:2017-12-19 03:42:11
【问题描述】:
我尝试在VMkernel 中使用 sed 执行替换。我使用了以下命令,
sed s/myname/sample name/g txt.txt
我收到一条错误消息,提示 sed: unmatched '/'。
我用\ 替换了空格。它奏效了。
当我尝试使用 python 时,
def executeCommand(cmd):
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print (output.decode("utf-8"))
executeCommand('sed s/myname/sample\ name/g txt.txt')
我再次收到错误sed: unmatched '/'。我使用 \s 而不是空格,我将名称替换为 samplesname。
如何用空格替换字符串?
【问题讨论】:
-
split() 默认按空格分割...所以当然会有问题...使用
\spython 字符串起作用...改用r'string'格式 -
报价。在 shell 中:
sed 's/myname/sample name/g' txt.txt在 python 中:executeCommand('sed s/myname/sample\\ name/g txt.txt')(额外的反斜杠)- 未经测试。 -
通过使用
split(),您将列表['sed', 's/myname/sample\', 'name/g', 'txt.txt']发送到子进程。 sed 表达式被分成两半。最好自己创建列表,这样您就可以完全控制。