2010-09-09 28 views

cevap

37

Bu, bağlıdır. Düzenli grep kullanıyorsanız, kaçamaz:

echo '(foo)'|grep '(fo*)' 

Sen aslında grup olarak parantez kullanmak istiyorsanız kaçmak zorunda. Eğer extended regular expressions kullanırsanız

, kaçmak yok:

echo '(foo)'|grep -E '\(fo*\)' 
+1

Dizinde grep -rin init() * kullandığımda, beklenmedik belirtecin yakınında sözdizimi hatasıyla karşılaşır (Bunu nasıl düzeltirim. –

+0

Üzgünüm, anlayamadım. Birkaç javascript dosyası var. init() işlevi birkaç yerde aradı.It dizininde grep -rin init() * kullanarak tüm init() çağrısının nerede olduğunu öğrenmek istiyorum.Itki geçersiz sözdizimi hakkında şikayet ediyor. –

+3

@Megha, sadece açıklığa kavuşturmak için bir kabuk hatasıydı, çünkü regex'den alıntı yapmadı. –

4
$ echo "init()" | grep -Erin 'init\([^)]*\)' 
1:init() 

$ echo "init(test)" | grep -Erin 'init\([^)]*\)' 
1:init(test) 

$ echo "initwhat" | grep -Erin 'init\([^)]*\)' 
+0

Bu yanlış. Varsayılan olarak ters eğimli parensler yakalama grupları oluşturduğundan, "init ne olursa olsun" ile kolayca eşleşecektir. Yukarıda söylediğim gibi, normal grep ile parka kaçma. –

+0

Bunun iyi olduğuna inanıyorum çünkü '-E' egrep'e eşdeğerdir. Tüm alt klasörleri tekrar tekrar çağırmak için – gkanwar

1

Taşı kök dizinine (JavaScript dosyalarıdır nerede farkında iseniz). Sonra aşağıdakileri yapın. Eğer "() init" tam dize aramak istiyorsanız

grep 'init()' *.js 
+0

parametresini ekleyin. – hejiaming007

18

sonra fgrep "init()" veya grep -F "init()" kullanın.

Bunların her ikisi de, sabit dize eşleştirmesi yapar, yani deseni normal ifadeler olarak değil de aramak için düz bir dize olarak ele alır. Ben regex arama yapmaktan daha hızlı olduğuna inanıyorum.

İlgili konular