Tek bir alıntı ile metin aramak için grep kullanıyor musunuz?


14

Ubuntu 12.04'te gömülü terminalli gedit metin editörü kullanıyorum. Kullanarak metin aramaya çalışıyorum grep. Bu kod satırını aramak istiyorum

'type' => 'select'

Denedim:

grep -r '\'type\' => \'select\''

Ancak grepsonuç döndürmedi.

Birisi bana yukarıdaki kodu nasıl arayacağımı söyleyebilir mi?

Yanıtlar:


17

Arama dizenizi çift tırnak işareti içine alın:

grep "'type' => 'select'"

7

Tek tırnak içinde görünen tek tırnaklardan kaçamazsınız. [Bash el kitabında] açıklandığı gibi :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Karakterleri tek tırnak içine almak ('' ') tırnak içindeki her karakterin gerçek değerini korur. Bir ters eğik çizgiden önce de olsa, tek tırnak işaretleri arasında tek bir tırnak işareti olmayabilir .

Yani, farklı yaklaşımlar kullanmalısınız:

  1. Çift tırnak kullanın:

    grep  "'type' => 'select'" file 
    
  2. Gereksiz derecede karmaşık çözümleri tercih ediyorsanız:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Tek tırnak işaretlerini belirtmek yerine istediğiniz zaman tek bir karakteri arayabilirsiniz:

    grep  '.type. => .select.' file 
    

Ama sadece kullanın ", işleri çok daha basit hale getirir.


Aradığım dize bir php dosyasındaysa ve değişken içeriyorsa ne olur? Bununla gerçekten mücadele ediyorum.
Aubrey Robertson

@AubreyRobertson Düzgün cevaplamak için bir örneğe ihtiyacım var. Eğer dize gibi bir şey bulmak istiyorsanız $var, yapabileceğin grep '$var' file.phptek tırnak içinde. Daha fazla ayrıntı için lütfen yeni bir soru gönderin ve bana burada bir yorum bırakın. Yardımcı olmaktan mutluluk duyarım.
terdon

Bunu anladım. Benim grep bungling dolar işareti değildi, dizi referansları (köşeli parantez) çünkü grep regex için kullanır. Grep etmeye çalıştığım çizgi bu: $output = $info['function']($variables); Onları çift ters eğik çizgi ile düzgün bir şekilde kaçmak zorunda kaldım. Sonuçta yapılan ve yapılan bu benim grep komutu:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson

1

cd .txt dosyanızı içeren dizine

cd /path 

Sonra :

kullanabilirsiniz grep "'type' => 'select'" name.txt

veya:

`grep "'type' => 'select'" /path/file.txt

Çıktı :

resim açıklamasını buraya girin


3
Soru sadece tek tırnaklarla ilgilidir, dizin yapısı veya grepdiğer (biraz ilgisiz) fonksiyonlardan herhangi biri ile ilgili değildir .
Chris

@Chris, -r(OP'nin yazdığı gibi) seçeneğiyle dosya adı gerekli değildir.
Brady Trainor
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.