Menggunakan grep untuk mencari teks dengan kutipan tunggal?

14

Saya menggunakan editor teks gedit dengan terminal tertanam di ubuntu 12.04. Saya mencoba mencari beberapa teks menggunakan grep. Saya ingin mencari baris kode ini

'type' => 'select'

Saya mencoba:

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

Tetapi greptidak memberikan hasil apa pun.

Jadi bisakah seseorang memberi tahu saya bagaimana cara mencari kode di atas?

pengguna baru
sumber

Jawaban:

17

Kelilingi string pencarian Anda dengan tanda kutip ganda:

grep "'type' => 'select'"
Chris
sumber
7

Anda tidak dapat menghindari tanda kutip tunggal yang muncul dalam tanda kutip tunggal. Seperti yang dijelaskan dalam [bash manual] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Menutup karakter dalam tanda kutip tunggal ('' ') mempertahankan nilai literal setiap karakter dalam tanda kutip. Kutipan tunggal mungkin tidak terjadi di antara tanda kutip tunggal, bahkan ketika didahului oleh garis miring terbalik .

Jadi, Anda harus menggunakan pendekatan berbeda:

  1. Gunakan tanda kutip ganda:

    grep  "'type' => 'select'" file 
    
  2. Jika Anda lebih suka solusi rumit yang tidak perlu:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Anda selalu dapat mencari karakter tunggal daripada menentukan tanda kutip tunggal:

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

Tapi gunakan saja ", itu membuat banyak hal lebih mudah.

terdon
sumber
Bagaimana jika string yang saya cari ada di file php dan berisi variabel? Saya benar-benar berjuang dengan yang satu ini.
Aubrey Robertson
@AubreyRobertson Saya perlu contoh untuk menjawab dengan benar. Jika Anda ingin menemukan sesuatu seperti string $var, Anda bisa melakukannya grep '$var' file.phpdengan tanda kutip tunggal. Untuk detail lebih lanjut, silakan kirim pertanyaan baru dan beri saya komentar di sini. Saya akan senang membantu.
terdon
Saya menemukan jawabannya. Itu bukan tanda-tanda dolar yang mengacaukan grep saya, itu adalah referensi array (kurung siku) karena grep menggunakan itu untuk regex. Ini adalah garis yang saya coba grep: $output = $info['function']($variables); Saya hanya harus melarikan diri dengan benar dengan backslash ganda. Ini adalah perintah grep saya setelah semua dikatakan dan dilakukan:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson
1

cd ke direktori yang berisi file .txt Anda

cd /path 

Kemudian :

kamu bisa memakai grep "'type' => 'select'" name.txt

atau :

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

Keluaran:

masukkan deskripsi gambar di sini

nux
sumber
3
Pertanyaannya hanya menyangkut tanda kutip tunggal, bukan struktur direktori atau grepfungsi lainnya (sedikit tidak relevan).
Chris
@ Chris, memang, dengan -ropsi (seperti OP menulis), nama file tidak diperlukan.
Brady Trainor