python中的Sed命令

2024-04-23 21:51:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我的意见如下

Type combinational  function (A B)

希望输出是

Type combinational 
function (A B)

我使用了代码和它的工作原理

sed 's/\([^ ]* [^ ]*\) \(function.*\)/\1\n\2/' Input_file

当我在python脚本中使用os.systemsubprocess使用这段代码时,会给我带来错误。 如何在python脚本中执行这个sed。或者如何为上面的sed code编写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 

Tags: 代码脚本cmdinputostype错误function
1条回答
网友
1楼 · 发布于 2024-04-23 21:51:58

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

with open('Input_file') as inputfile:
   lines = inputfile.read()
lines = lines.replace(' function', '\nfunction')

这比您当前的sed脚本稍微不严格,因为它不需要在function标记之前正好有两个空格分隔的标记。如果你想严格一点,试试re.sub()

import re
# ...
lines = re.sub(r'^(\S+\s+\S+)\s+(function)', r'\1\n\2', lines, re.M)

(切题来说,您还希望避免不必要的shell=True;也许可以参见Actual meaning of 'shell=True' in subprocess

相关问题 更多 >