python中的Sed命令

python中的Sed命令,python,Python,我的意见如下 Type combinational function (A B) 希望输出是 Type combinational function (A B) 我使用了代码和它的工作原理 sed 's/\([^ ]* [^ ]*\) \(function.*\)/\1\n\2/' Input_file 当我在python脚本中使用os.system和subprocess使用此代码时,它会给我带来错误。 如何在python脚本中执行这个sed。或者我如何为上面的sed代码编写pytho

我的意见如下

Type combinational  function (A B)
希望输出是

Type combinational 
function (A B)
我使用了代码和它的工作原理

sed 's/\([^ ]* [^ ]*\) \(function.*\)/\1\n\2/' Input_file
当我在python脚本中使用
os.system
subprocess
使用此代码时,它会给我带来错误。 如何在python脚本中执行这个
sed
。或者我如何为上面的
sed代码
编写python代码。 使用的Python代码

cmd='''
sed 's/\([^ ]* [^ ]*\) \(function.*\)/\1\n\2/' Input_file
'''
subprocess.check_output(cmd, shell=True)
错误是

sed: -e expression #1, char 34: unterminated `s' command 

字符串中的
\n
被Python替换为文字换行符。正如@bereal在评论中所建议的那样,您可以通过在脚本周围使用
r''''.''.''.'
而不是
'.'''.''.''.'.'.'.'.'.''.'.''.''.
来避免这种情况;但是一个更好的解决方案是避免在
sed
中做Python本身已经做得很好的事情

打开('Input_file')作为inputfile的
:
lines=inputfile.read()
行=行。替换('function','\n function')
这比您当前的
sed
脚本稍微宽松一些,因为它不需要在
函数
标记之前有两个空格分隔的标记。如果您想严格要求,请尝试
re.sub()

重新导入
# ...
lines=re.sub(r'^(\S+\S+\S+\S+(函数)’,r'\1\n\2',lines,re.M)

(切题地说,您还希望避免不必要的
shell=True
;也许可以看到)

字符串中的
\n
被Python替换为文字换行符。正如@bereal在评论中所建议的那样,您可以通过在脚本周围使用
r''''.''.''.'
而不是
'.'''.''.''.'.'.'.'.'.''.'.''.''.
来避免这种情况;但是一个更好的解决方案是避免在
sed
中做Python本身已经做得很好的事情

打开('Input_file')作为inputfile的
:
lines=inputfile.read()
行=行。替换('function','\n function')
这比您当前的
sed
脚本稍微宽松一些,因为它不需要在
函数
标记之前有两个空格分隔的标记。如果您想严格要求,请尝试
re.sub()

重新导入
# ...
lines=re.sub(r'^(\S+\S+\S+\S+(函数)’,r'\1\n\2',lines,re.M)

(切题来说,您还希望避免不必要的
shell=True
;也许可以看到)

在打开
'
之前尝试
r
。在打开
'
之前尝试
r