Usi grep per cercare testi con virgolette singole?


14

Sto usando l'editor di testo gedit con terminale incorporato in Ubuntu 12.04. Sto cercando di cercare del testo usando grep. Voglio cercare questa riga di codice

'type' => 'select'

Provai:

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

Ma grepnon ha restituito alcun risultato.

Quindi qualcuno può gentilmente dirmi come cercare il codice sopra?

Risposte:


17

Circonda la stringa di ricerca tra virgolette doppie:

grep "'type' => 'select'"

7

Non puoi evitare virgolette singole che appaiono tra virgolette singole. Come spiegato nel [manuale di bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Racchiudere i caratteri tra virgolette singole ('' ') conserva il valore letterale di ciascun carattere tra virgolette. Tra virgolette singole non può verificarsi una virgoletta, anche se preceduta da una barra rovesciata .

Quindi, devi usare approcci diversi:

  1. Usa virgolette doppie:

    grep  "'type' => 'select'" file 
    
  2. Se preferisci soluzioni inutilmente complesse:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Puoi sempre cercare un singolo carattere invece di specificare le virgolette singole:

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

Ma basta usare ", rende le cose molto più semplici.


Cosa succede se la stringa che sto cercando si trova in un file php e contiene variabili? Sto davvero lottando con questo.
Aubrey Robertson,

@AubreyRobertson Avrei bisogno di un esempio per rispondere correttamente. Se vuoi trovare qualcosa come la stringa $var, puoi farlo grep '$var' file.phptra virgolette singole. Per maggiori dettagli, pubblica una nuova domanda e lasciami un commento qui. Sarei felice di aiutarti.
terdon,

L'avevo capito. Non erano i segni del dollaro che mi facevano confusione nel grep, erano i riferimenti di array (parentesi quadre) perché grep usa quelli per regex. Questa è la linea che stavo cercando di grep: $output = $info['function']($variables); dovevo solo scappare correttamente con una doppia barra rovesciata. Questo è il mio comando grep dopo tutto ciò che è stato detto e fatto:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson,

1

cd nella directory che contiene il tuo file .txt

cd /path 

Poi :

Puoi usare grep "'type' => 'select'" name.txt

o :

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

Produzione :

inserisci qui la descrizione dell'immagine


3
La domanda riguarda solo le virgolette singole, non la struttura della directory o qualsiasi grepaltra funzionalità (leggermente irrilevante).
Chris

@Chris, infatti, con l' -ropzione (come scrive OP), il nome del file non è necessario.
Brady Trainor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.