python:子进程抛出未终止的“ s”错误

时间:2018-12-20 17:23:13

标签: python

我有需要一些修改的现有代码。我找不到更好,更轻松的方式在python中实现,并且可以使用Unix实现我想要的功能。因此,我试图在代码中添加子流程,并且会引发错误。

subprocess.call(['sed', '-i', '-e',  ':a;/"$/{P;D};N;s/\n//g;ba', file1])

上面是代码,我得到的错误是

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

我在做什么不正确?

谢谢

2 个答案:

答案 0 :(得分:2)

好的,首先,您的字符串确实是不完整的,因为\n字符在传递给sed之前被python 转义,这会在您的行内进行换行sed规则,使其确实不完整。要解决此问题:

subprocess.call(['sed', '-i', '-e',  ':a;/"$/{P;D};N;s/\\n//g;ba', file1])

话虽这么说,您应该能够使用基本的python字符串操作和PCRE实现相同的目的。

答案 1 :(得分:2)

s / \ n // g 命令中间的'\ n'被python评估为实际换行符, sed 解释为命令的结尾。您需要转义反斜杠,或者(可能更好)使用原始字符串语法:

subprocess.call(['sed', '-i', '-e',  r':a;/"$/{P;D};N;s/\n//g;ba', file1])