1

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

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.

如何用空格替换字符串?

4

1 回答 1

2

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

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

否则,您将打开一罐蠕虫,有效地发挥外壳解析器的作用。


或者,您可以在 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")
于 2017-07-14T07:52:55.983 回答