我知道egrep有一个非常有用的方法,通过使用:
将两个表达式组合在一起egrep "pattern1.*pattern2"|egrep "pattern2.*pattern1" filename.txt|wc -l
然而,在搜索三个表达式时,有一种简单的方法可以使用egrep的AND运算符,因为当你添加额外的表达式时,排列会以指数方式增加。
我知道使用sort|uniq -d
的另一种方式,但我正在寻找一个更简单的解决方案。
编辑:
我目前的搜索方式将产生五个总结果:
#!/bin/bash
pid=$$
grep -i "angio" rtrans.txt|sort|uniq|egrep -o "^[0-9]+ [0-9]+ " > /tmp/$pid.1.tmp
grep -i "cardio" rtrans.txt|sort|uniq|egrep -o "^[0-9]+ [0-9]+ " > /tmp/$pid.2.tmp
grep -i "pulmonary" rtrans.txt|sort|uniq|egrep -o "^[0-9]+ [0-9]+ " > /tmp/$pid.3.tmp
cat /tmp/$pid.1.tmp /tmp/$pid.2.tmp|sort|uniq -d > /tmp/$pid.4.tmp
cat /tmp/$pid.4.tmp /tmp/$pid.3.tmp|sort|uniq -d > /tmp/$pid.5.tmp
egrep -o "^[0-9]+ [0-9]+ " /tmp/$pid.5.tmp|getDoc.mps > /tmp/$pid.6.tmp
head -10 /tmp/$pid.6.tmp
mumps@debianMumpsISR:~/Medline2012$ AngioAndCardioAndPulmonary.script
1514 Structural composition of central pulmonary arteries. Growth potential after surgical shunts.
1517 Patterns of pulmonary arterial anatomy and blood supply in complex congenital heart disease
with pulmonary atresia
3034 Controlled reperfusion following regional ischemia.
3481 Anaesthetic management for oophorectomy in pulmonary lymphangiomyomatosis.
3547 A comparison of methods for limiting myocardial infarct expansion during acute reperfusion--
primary role of unload
虽然:
mumps@debianMumpsISR:~/Medline2012$ grep "angio" rtrans.txt|grep "cardio" rtrans.txt|grep "pulmonary" rtrans.txt|wc -l
185
产生185行文本,因为它只是在肺部而不是所有三次搜索中获取搜索值。
答案 0 :(得分:9)
怎么样
grep "pattern1" file|grep "pattern2"|grep "pattern3"
这将给出那些包含p1,p2和p3的行。但任意顺序。
答案 1 :(得分:1)
肯特的方法
grep "pattern1" file|grep "pattern2"|grep "pattern3"
是正确的,它应该更快,只是为了记录我想发布一个使用egrep
做同样的替代方案而不用pipping:
egrep "pattern1.*pattern2|pattern2.*pattern1"
查找p1 followed by p2
或p2 followed by p1
。
答案 2 :(得分:0)
最初的问题是关于为什么他的egrep命令不起作用。
egrep "pattern1.*pattern2"|egrep "pattern2.*pattern1" filename.txt|wc -l
Kent和Stanislav通过预先设置filename.txt来指出语法错误是正确的。但这并没有解决原来的问题。
Bob的“当前方式”(4年前)是一种多指令方法,用于在不同的行上设置不同的关键字。换句话说,他的脚本正在寻找一组包含 任何 的搜索字词的行。其他提议的解决方案只会产生包含 所有 的搜索字词的行,这似乎不是他的意图。
相反,他可以使用单行egrep来查找 任何 这些条款,如下所示:
egrep -e 'pattern1|pattern2' filename.txt