在 python 中使用 space 进行 Sed

Sed with space in python

我正在尝试在 VMkernel 中使用 sed 执行替换。我使用了以下命令,

sed s/myname/sample name/g txt.txt

我收到一条错误消息 sed: unmatched '/'。 我用 \ 替换了 space。成功了。

当我尝试使用 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 而不是 space 我将名称替换为 samplesname

如何用 space 替换字符串?

最简单的事情就是不聪明地拆分命令:

executeCommand(['sed', 's/myname/sample name/g', 'txt.txt'])

否则你就是在打开一堆蠕虫,有效地扮演着 shell 解析器的角色。


或者您可以 运行 shell 中的命令并让 shell 解析和 运行 命令:

import subprocess

def executeCommand(cmd):
   process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
   # Or:
   # This will run the command in /bin/bash (instead of /bin/sh)
   process = subprocess.Popen(['/bin/bash', '-c', cmd], stdout=subprocess.PIPE)
   output, error = process.communicate()
   print (output.decode("utf-8")) 

executeCommand("sed 's/myname/sample name/g' txt.txt")