首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的bash : sed未终止的命令

python中的bash : sed未终止的命令
EN

Stack Overflow用户
提问于 2014-09-30 17:19:57
回答 1查看 502关注 0票数 0

下面的命令在bash中运行良好。

代码语言:javascript
复制
/folk/vlm/commandline/./vlmTool find -l all | grep -e "^Target ID" -e "City" -e "Zone" | sed "s#.*City.*#&\n#g" > new.txt

但是在python中,当我试图执行相同的命令时,我得到:

代码语言:javascript
复制
['sed', 's#.*City.*#&\n#g']
**sed: -e expression #1, char 12: unterminated `s' command**

代码:

代码语言:javascript
复制
#!/usr/local/bin/python -tt

import subprocess
import shlex
cmd = '/folk/vlm/commandline/./vlmTool find -l all | grep -e "^Target ID" -e "City" -e "Zone" | sed "s#.*City.*#&\n#g" > new.txt'
cmd2= "/folk/vlm/commandline/./vlmTool find -l all"
args1 = shlex.split(cmd2)
cmd3 = 'grep -e "^Target ID" -e "City" -e "Zone"'
args2 = shlex.split(cmd3)
cmd4 =  'sed "s#.*City.*#&\n#g"'
args3 = shlex.split(cmd4)
print args3
p1 = subprocess.Popen(args1, stdout=subprocess.PIPE)
p2 = subprocess.Popen(args2, stdin=p1.stdout, stdout=subprocess.PIPE)
p3 = subprocess.Popen(args3, stdin=p2.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
p2.stdout.close()
output = p3.communicate()[0]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-30 17:43:38

在python中,\n序列被理解为换行符的转义序列;因此sed认为s命令已经完成并启动了一个新命令。要获得字符串中包含的反斜杠,可以像...\\n...那样转义它,或者使用原始字符串:r's#.*City.*#&\n#g'

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26126531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档