2009-10-03 28 views
14

Sanırım birkaç dizim var: str1 ve str2 ve str3.grep egrep çoklu dizgiler

  • Tüm dizeleri olan satırlar nasıl bulunur?
  • Bunlardan herhangi birine sahip olabilecek çizgiler nasıl bulunur?
  • Ayrıca str1 ve str2 ve str3 öğelerinden birine sahip olan satırları nasıl bulabilirim [, ancak ikisi birden değil?]?

cevap

-2

Şahsen, bunu grep ile bir şeyle birlikte çakıştırmaya çalışmak yerine perl'de yapıyorum. İlki için Mesela

,: Sen makul "tüm" veya durumlar "olanların bu artı ya" grep çünkü desteklemediği lookahead yapamaz

while (<FILE>) 
{ 
    next if ! m/pattern1/; 
    next if ! m/pattern2/; 
    next if ! m/pattern3/; 

    print $_; 
} 
+3

-1: Görev iyon değil: bunu yapmak için en iyi araç nedir, ama bunu grep ile nasıl yaparım.Unix programcılar arasında, "grep" spesifik olarak ya grep programına başvurabilir veya bir vücut arama genel sorun: – quosoo

+3

Ve cevap –

+0

@quosoo "sen çalışırken deli gidersiniz grep ile Yapmayın" dir Dizeler veya desenler için metin. Tim'in tasarladığı kullanım net değil, bu yüzden Paul Tomblin'in cevabının yerinde olduğunu düşünüyorum. –

8

. Perl kullan. "Herhangi bir" durumda, bu egrep '(str1|str2|str3)' file.

"tüm" davayı yapmak mantıksız yoludur:

egrep '(str1.*str2.*str3|str3.*str1.*str2|str2.*str1.*str3|str1.*str3.*str2)' file 

yani oturum permütasyon oluşturmaktır. Bu elbette, yapmak saçma bir şey. İçin

benzer "bu artı bunlardan biri",:

egrep '(str1.*(str2|str3)|(str2|str3).*str1)' file 
27

Bu üç soruya benziyor. Bu tür ifadeleri bir araya getirmenin en kolay yolu birden fazla boruyla yapılır. Bu konuda utanılacak bir şey yok, özellikle de düzenli bir ifade (egrep'u kullanarak), bağımsızlık siparişi vermek istediğinizi ima ettiğinden beri ungainly olacaktır.

Yani, sırayla,

  1. grep dizge1 | grep str2 | grep str3

  2. egrep '(dizge1 | str2 | str3)'

  3. grep dizge1 | egrep '(str2 | str3)'

Yapabileceğiniz "ve" egrep kullanarak bir düzen bağımsız bir şekilde biçim ama daha kolay borulu greps kullanarak sipariş bağımsız AND teriminiz yapmak için hatırlamak bulacağınızı düşünüyorum ve bağımsız sipariş veya düzenli ifadeler kullanarak.

+1

Güzel bitti. +1 –

+0

3 "her ikisini de değil" gereksinimini karşılamıyor, ancak bu gereksinimin karşılanması zor. Dikkatlice hazırlanmış bir önek ve diğer dizeyi satırın başka herhangi bir yerinde görünmesini engelleyen son ekin olması için, değişimin her bir tarafına ihtiyacınız olacaktır. –

+0

@Michael E: 'İkisi de değil, her ikisi de italiktir ve bundan sonra bir soru işareti vardır, çünkü soruyu düzenlediğimde, askerin peşinde olduklarından emin değildim. @Groundhog, (belki de) kaldırılması gereken bir yorum/değişiklikle sorunu düzeltmeden/gözden geçirmeden önce (iyi) cevabını yazdı. –

3

grep -E color "dize1 | dize2 | String3 ...."

örneğin bulmak ister AMD (SVM) veya Intel (VMX) işlemci ve 64bit ise (lm kullanarak sistemimiz/proc/

-E

cpuinfo için şarttır

grep -E color "| | svm VMX lm":) lm

komut örnek ... 64bit anlamına uzun Modu- açılımı çoklu dizeleri bul