我有一个grep查询:
grep "8=ABC\.4\.[24].*\|10=[0-9]+" output.txt |grep "35=8"| cut -d "|" -f 12 >redirect.txt
如何在python脚本中执行相同的操作?我知道一个简单的grep它的工作原理如下:
sed_process = subprocess.Popen(['sed', sed_query,fopen], stdout=subprocess.PIPE)
grep_query = "8=ABC\.4\.[24].*\|10=[0-9]+"
grep_process = subprocess.Popen(['grep', grep_query], stdin=sed_process.stdout, stdout=subprocess.PIPE)
我对如何组合2个grep命令和cut
命令并将其重定向到输出文件感到困惑?
答案 0 :(得分:2)
正如评论中所述,这可以在python中实现而不需要调用任何东西。但是如果你想进行外部呼叫,就像你在你的例子中一样保持链接。最后的标准输出是一个打开的文件,以完成重定向。注意我也关闭父端stdout,以便它不会为管道保留额外的入口点。
import subprocess as subp
p1 = subp.Popen(["grep", "8=ABC\.4\.[24].*\|10=[0-9]+", "output.txt"],
stdout=subp.PIPE)
p1.stdout.close()
p2 = subp.Popen(["grep", "35=8"], stdin=p1.stdout, stdout=subp.PIPE)
p2.stdout.close()
p3 = subp.Popen(["cut", "-d", "|", "-f", "12"], stdin=p2.stdout,
stdout=open('redirect.txt', 'wb'))
p3.wait()
p2.wait()
p1.wait()
答案 1 :(得分:0)
对于cut
,它与grep
完全相同。要在结尾处重定向到文件,只需open()
一个文件,并在运行stdout
命令时将其作为cut
传递。