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.