Сед с пробелом в питоне
Я пытался выполнить заменить с помощью Sed в 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
,
Как я могу заменить строку пробелом?
1 ответ
Решение
Самое простое - не разбираться в разделении команды:
executeCommand(['sed', 's/myname/sample name/g', 'txt.txt'])
В противном случае вы открываете банку с червями, эффективно играя роль парсера оболочки.
В качестве альтернативы вы можете запустить команду в оболочке и позволить ей проанализировать и выполнить команду:
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")