Verwenden Sie grep, um Texte mit einfachen Anführungszeichen zu suchen?

14

Ich verwende den gedit-Texteditor mit eingebettetem Terminal in Ubuntu 12.04. Ich versuche mit nach Text zu suchen grep. Ich möchte nach dieser Codezeile suchen

'type' => 'select'

Ich habe es versucht:

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

Aber grephat keine Ergebnisse zurückgegeben.

Kann mir jemand sagen, wie ich nach dem obigen Code suchen soll?

neuer Benutzer
quelle

Antworten:

17

Umschließen Sie Ihren Suchbegriff mit doppelten Anführungszeichen:

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

Sie können einfache Anführungszeichen, die in einfachen Anführungszeichen stehen, nicht umgehen. Wie im [bash manual] erklärt :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Das Einschließen von Zeichen in einfache Anführungszeichen ('' ') behält den Literalwert jedes Zeichens in den Anführungszeichen bei. Ein einfaches Anführungszeichen darf nicht zwischen einfachen Anführungszeichen stehen, auch wenn ein Backslash vorangestellt ist .

Sie müssen also verschiedene Ansätze verwenden:

  1. Verwenden Sie doppelte Anführungszeichen:

    grep  "'type' => 'select'" file 
    
  2. Wenn Sie unnötig komplexe Lösungen bevorzugen:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Sie können immer nach einem einzelnen Zeichen suchen, anstatt die einzelnen Anführungszeichen anzugeben:

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

Aber verwenden "Sie einfach , es macht die Dinge viel einfacher.

terdon
quelle
Was ist, wenn die Zeichenfolge, nach der ich suche, in einer PHP-Datei enthalten ist und Variablen enthält? Ich kämpfe wirklich mit diesem.
Aubrey Robertson
@ AubreyRobertson Ich brauche ein Beispiel, um richtig zu antworten. Wenn Sie etwas wie die Zeichenfolge finden möchten $var, können Sie dies grep '$var' file.phpin einfachen Anführungszeichen tun . Für mehr Details, bitte poste eine neue Frage und hinterlasse mir hier einen Kommentar. Ich würde gerne helfen.
Terdon
Ich habe es herausgefunden. Es waren nicht die Dollarzeichen, die mein Grep störten, sondern die Array-Referenzen (eckige Klammern), weil Grep diese für Regex verwendet. Dies ist die Zeile, die ich zu greifen versuchte: $output = $info['function']($variables); Ich musste sie nur richtig mit doppeltem Backslash entkommen. Dies ist mein grep Befehl, nachdem alles gesagt und getan:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson
1

Wechseln Sie in das Verzeichnis, in dem sich Ihre TXT-Datei befindet

cd /path 

Dann :

Sie können verwenden grep "'type' => 'select'" name.txt

oder :

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

Ausgabe :

Bildbeschreibung hier eingeben

nux
quelle
3
Die Frage betrifft nur die einfachen Anführungszeichen, nicht die Verzeichnisstruktur oder eine der grepanderen (leicht irrelevanten) Funktionen.
Chris
@ Chris, in der Tat, mit der -rOption (wie OP schreibt), ist der Dateiname nicht erforderlich.
Brady Trainor