我有需要一些修改的现有代码。我找不到更好,更轻松的方式在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
我在做什么不正确?
谢谢
答案 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])