Grep'te birden çok kelimenin "veya" ifadesi için normal ifade


12
[Computer]$ grep "foo|bar" filename

Yukarıdaki komut dosya adı "foo" veya "bar" olduğu yerde her satır döndürmek gerektiğini anlıyorum. Man sayfaları onaylar | Regex veya sembol olarak ve kod "foo" ve "bar" için bağımsız olarak çalışır. Neyi kaçırıyorum?

Yanıtlar:


21

grep varsayılan olarak temel normal ifadeleri (BRE) kullanır. Man sayfasından:

Temel ve Genişletilmiş Düzenli İfadeler: Temel normal ifadelerde?, +, {, |, (Ve) meta karakterleri özel anlamlarını kaybeder; bunun yerine ters eğik çizgili \ ?, +, {, \ |, (ve) sürümlerini kullanın.

Yani ya kaçmak zorundasınız |:

grep "foo\|bar" filename 

veya genişletilmiş düzenli ifadeleri açın:

grep -E "foo|bar" filename

Bunu adam sayfasında gördüm ve yanlış anladım. Bunun anlamı olduğunu düşündüm \ | tek tek ifadelerin aksine "foo | bar" ifadesinin tamamını aramasını sağlar. Hızlı yanıt için teşekkürler!
Ocasta Eshu

4
Bunun yerine ( egrepiçin bir takma ad grep -E) da kullanabilirsiniz grep.
speakr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.