2012-04-13 21 views
11

VB kaynak dosyasındaki işlevlerin oluşumunu bulmak için aşağıdaki grep sorgusunu kullanıyorum.İsteğe bağlı bir sözcük eklemek nasıl grep edilir?

grep -nri "^\s*\(public\|private\|protected\)\s*\(sub\|function\)" formName.frm 

Bu maçları - çünkü orada ek kelime "Statik" nin

Private Static Sub SaveCustomer() 

-

Private Sub Form_Unload(Cancel As Integer) 
    Private Sub lbSelect_Click() 
    ... 

Ancak, gibi işlevler üzerinde özlüyor. Grep sorgusunda bu "isteğe bağlı" sözcüğü nasıl hesaplanır?

cevap

12

Sen isteğe bağlı bir şey yapmak için bir \? kullanabilirsiniz: Bu durumda

grep -nri "^\s*\(public\|private\|protected\)\s*\(static\)\?\s*\(sub\|function\)" formName.frm 

, "statik" dizesini içeren önceki grup, (yani 0 veya 1 kez olabilir) isteğe bağlıdır.

+0

Ok. cevap için teşekkürler. – CodeBlue

+0

ters eğik çizgi olmadan soru işareti işaret misiniz? – CodeBlue

+1

bir hazır @CodeBlue?. Grep'i bu şekilde çağırdığınızda, BRE'yi kullanır (temel normal ifadeler) .BRE'de m "daha gelişmiş" ifadeler için meta karakterlerden herhangi biri. Başka bir cevapta belirtildiği gibi, eğer -E'yi geçmiş olsaydınız, o zaman kaçmak zorunda kalmazdınız (aslında, kaçmak onu bir harf işareti ile eşleşmesine neden olur!). – FatalError

6

bilge grep, önem düzeyi kullanılarak: biz sadece

istiyorsanız

I am well 
I was well 
You are well 
You were well 
I am very well 
He is well 
He was well 
She is well 
She was well 
She was very well 

: (çok kelime senin statik açılımı) Aşağıdaki örnek Verilen

* : 0 or many 
+ : 1 or many 
? : 0 or 1 <--- this is what you need. 

I am well 
I was well 
You are well 
You were well 
I am very well 

'u '?' bunu tahmin, ben egrep kullanmaya davet ediyorum

egrep "(I|You) (am|was|are|were) (very)?well" file.txt 

: (aynı zamanda biz 'çok' kelimesini isteyeceksiniz belirtmeyi 'çok' sonra sıfır ya da bir kez alanının dikkatli yerleştirme fark yerine ait grep (eğer Genişletilmiş Düzenli İfadeler için, grep -E deneyebilirsiniz).

+0

egrep bu grep ne yapmıyor? – CodeBlue

+0

Sanırım grep -E'yi büyük harfle kastetmişsinizdir. – CodeBlue

+0

Muhtemelen fark ettiğiniz gibi, egrep genişletilmiş düzenli ifadeleri tanır. Ve cevabımı düzelttim. Gerçekten E harfi, teşekkürler. –