Utiliser grep pour rechercher des textes avec un seul guillemet?

14

J'utilise l'éditeur de texte gedit avec un terminal intégré dans Ubuntu 12.04. J'essaie de rechercher du texte en utilisant grep. Je veux rechercher cette ligne de code

'type' => 'select'

J'ai essayé:

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

Mais grepn'a retourné aucun résultat.

Quelqu'un peut-il donc gentiment me dire comment rechercher le code ci-dessus?

nouvel utilisateur
la source

Réponses:

17

Entourez votre chaîne de recherche de guillemets doubles:

grep "'type' => 'select'"
Chris
la source
7

Vous ne pouvez pas échapper aux guillemets simples qui apparaissent dans les guillemets simples. Comme expliqué dans le [manuel bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Le fait de mettre des caractères entre guillemets simples ('' ') préserve la valeur littérale de chaque caractère dans les guillemets. Un guillemet simple ne peut pas se produire entre guillemets simples, même lorsqu'il est précédé d'une barre oblique inverse .

Donc, vous devez utiliser différentes approches:

  1. Utilisez des guillemets doubles:

    grep  "'type' => 'select'" file 
    
  2. Si vous préférez des solutions inutilement complexes:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Vous pouvez toujours rechercher n'importe quel caractère au lieu de spécifier les guillemets simples:

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

Mais utilisez simplement ", cela rend les choses beaucoup plus simples.

terdon
la source
Que faire si la chaîne que je recherche se trouve dans un fichier php et contient des variables? Je me bats vraiment avec celui-ci.
Aubrey Robertson
@AubreyRobertson J'aurais besoin d'un exemple pour répondre correctement. Si vous voulez trouver quelque chose comme la chaîne $var, vous pouvez le faire grep '$var' file.phpentre guillemets simples. Pour plus de détails, veuillez poster une nouvelle question et laissez-moi un commentaire ici. Je serais ravi de vous aider.
terdon
Je l'ai compris. Ce n'étaient pas les signes dollar qui gênaient mon grep, c'était les références de tableau (crochets) parce que grep les utilise pour regex. C'est la ligne que j'essayais de grep: $output = $info['function']($variables); je devais juste leur échapper correctement avec une double barre oblique inverse. Ceci est ma commande grep après tout dit et fait:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson
1

cd dans le répertoire qui contient votre fichier .txt

cd /path 

Alors :

vous pouvez utiliser grep "'type' => 'select'" name.txt

ou :

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

Production :

entrez la description de l'image ici

nux
la source
3
La question ne concerne que les guillemets simples, pas la structure du répertoire ni aucune grepautre fonctionnalité (légèrement hors de propos).
Chris
@Chris, en effet, avec l' -roption (comme l'écrit OP), le nom de fichier n'est pas nécessaire.
Brady Trainor