Python 使用sed pass变量调用subprocess.call
我正在尝试使用Python 使用sed pass变量调用subprocess.call,python,sed,subprocess,Python,Sed,Subprocess,我正在尝试使用子流程运行Python脚本。调用在匹配模式后添加一行。方法如下: addline1是变量,其值为“hello world1” filename1是包含路径和文件名的变量,例如“/tmp/path1/filename.conf” 在filename.conf中,它有35行,我想在匹配字符串“ReWriteEngine On” 它失败了,但有以下例外: **sed: -e expression #1, char 16: expected \ after `a', `c' or `i'*
子流程运行Python脚本。调用在匹配模式后添加一行。方法如下:
addline1
是变量,其值为“hello world1”
filename1
是包含路径和文件名的变量,例如“/tmp/path1/filename.conf”
在filename.conf
中,它有35行,我想在匹配字符串“ReWriteEngine On”
它失败了,但有以下例外:
**sed: -e expression #1, char 16: expected \ after `a', `c' or `i'**
请任何人提出修改意见好吗
使用fileinput
而不是sed尝试代码
import fileinput
processing_foo1s = False
for line in fileinput.input('/tmp/filename1/mod_wl_ohs.conf', inplace=1):
if line.startswith("RewriteEngine On"):
processing_foo1s = True
else:
if processing_foo1s:
print 'foo bar'
processing_foo1s = False
print line
纠正sed
问题:
sed_cmd = '/ReWriteEngine On/a' + addline1
subprocess.call(['sed', '-i', sed_cmd, filename1])
注意:如果字符串必须在行首匹配,请使用/^ReWriteEngine On/a
使用fileinput
:
import fileinput
for line in fileinput.input(filename1, inplace=1):
print line,
if line.startswith("ReWriteEngine On"):
print 'foo bar'
参考资料:纠正sed
问题:
sed_cmd = '/ReWriteEngine On/a' + addline1
subprocess.call(['sed', '-i', sed_cmd, filename1])
注意:如果字符串必须在行首匹配,请使用/^ReWriteEngine On/a
使用fileinput
:
import fileinput
for line in fileinput.input(filename1, inplace=1):
print line,
if line.startswith("ReWriteEngine On"):
print 'foo bar'
参考资料:为什么不使用python本身?使用python本身?你能详细说明一下吗?你的意思是使用os.system调用吗?我甚至在python本身中尝试过这种方法,但这无助于添加新字符串:对于fileinput.input('/tmp/filename1/mod_wl_ohs.conf',inplace=1)中的行,import fileinput processing\u foo1s=False:if line.startswith(“RewriteEngine On”):processing\u foo1s=True其他:如果processing\u foo1s:print'foo bar'processing\u foo1s=False打印行,关于sed
问题,可以通过构造字符串并传递给子流程来解决。。例如:sed_cmd='/ReWriteEngine On/a'+addline1
和subprocess.call(['sed','-i',sed_cmd,filename1])
当然-让我试试看。为什么不全部用python本身来做呢?用python本身?你能详细说明一下吗?你的意思是使用os.system调用吗?我甚至在python本身中尝试过这种方法,但这无助于添加新字符串:对于fileinput.input('/tmp/filename1/mod_wl_ohs.conf',inplace=1)中的行,import fileinput processing\u foo1s=False:if line.startswith(“RewriteEngine On”):processing\u foo1s=True其他:如果processing\u foo1s:print'foo bar'processing\u foo1s=False打印行,关于sed
问题,可以通过构造字符串并传递给子流程来解决。。例如:sed_cmd='/ReWriteEngine On/a'+addline1
和subprocess.call(['sed','-i',sed_cmd,filename1])
当然-让我试试看。