Değişmez dizeler için Grep


103

Tamamen değişmez dizeleri aramak için grep tipi bir aracın peşindeyim. Ayrı bir günlük dosyasındaki bir satırın parçası olarak bir günlük dosyasının bir satırının oluşumunu arıyorum. Arama metni her tür normal ifade özel karakterini içerebilir, örneğin []().*^$-\,.

Normal ifadeyi kullanmayan, ancak bir dizenin değişmez hallerini arayan bir Unix arama aracı var mı?


Sorunun neden " grepDeğişmez dizeler için arama yapabilir miyim ?" Olmadığını merak ediyorum. yerine "gibi orada şey mi grepbu dizeler arayabilirim?" Düz başlı tornavidalar Philips vida başlarına uyabilir, biliyorsunuz;)
ADTC

Yanıtlar:


138

Bunun için -F seçeneği ile grep kullanabilirsiniz.

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings

"satırsonu ile ayrılmış sabit dizeler" Bunu terminal komut isteminde nasıl yapabilirim? Bir kalıp dosyası oluşturabileceğimi biliyorum, ancak dosya olmadan komut isteminde yapmak mümkün mü? Enter tuşuna basmak açıkça komutu çalıştırır.
ADTC

13
Kendi soruma cevap vereceğim. :) Sadece -eseçeneğin tekrarlarını kullanarak birden fazla sabit dizgeyi sağlamanız gerekir . Bunun gibi: grep -F -e "fixed1" -e "fixed2" -e "fixed3" -e "fixed4". Yeni satır gerekmez;)
ADTC

2
Solaris'te mevcut değil. Bunun yerine fgrepkullanılır.
majkinetor

2
@ADTC Sadece özel karakterler içeren aranan dizge için tek tırnak kullanmam gerektiğini, aksi takdirde hiçbir şey bulunamayacağını öğrendim. Yani bu herhangi bir sonuç vermedi: grep --include=\*.php -FRn -e "$$"Tek tek sorgu kullanmak bana istenen sonucu verdi:grep --include=\*.php -FRn -e '$$'
Piemol

2
Sen olan doğru @ADTC. $ve diğer birkaç karakter özeldir ve enter tuşuna bastıktan sonra grep(veya herhangi bir komut) çalıştırılmadan önce bunlar bash ile değiştirilecektir . Bash'e tek tırnak içine alarak tüm karakterleri (tek bir alıntı hariç) dokunmadan bırakmasını söyleyebilirsiniz. Tek bir alıntı yazmanız gerekiyorsa, şunu yapın'I'\''m special'
ndemou

15

Ya bu normal ifadeler yapmayacak ya fgrepda grep -Fyapmayacak. fgrepile aynıdır grep -Fama özünde tembel olmak, argümanlar konusunda endişe gerekmez tercih :-)

grep   ->  grep
fgrep  ->  grep -F  (fixed)
egrep  ->  grep -E  (extended)
rgrep  ->  grep -r  (recursive, on platforms that support it).

GNU grep için fgrep sadece -F almak yapar grep sembolik bağ olarak verilmiştir
Daenyth

3
egrepve fgrepPOSIX standardı tarafından belirtilmemiştir; grep -Fve grep -E are
Richard Hansen


3

awk, sabit dizge bulma ve programlama yetenekleri, örneğin sadece

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file

2
cat list.txt
one:hello:world
two:2:nothello

three:3:kudos

grep --color=always -F"hello

three" list.txt

çıktı

one:hello:world
three:3:kudos

2
Ben katılmıyorum Bunun nasıl çalıştığına dair yararlı bir örnek.
timwaagh
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.