¿Usa grep para buscar textos con comillas simples?


14

Estoy usando el editor de texto gedit con terminal incrustado en ubuntu 12.04. Estoy tratando de buscar algo de texto usando grep. Quiero buscar esta línea de código

'type' => 'select'

Lo intenté:

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

Pero grepno devolvió ningún resultado.

Entonces, ¿alguien puede decirme cómo buscar el código anterior?

Respuestas:


17

Rodea tu cadena de búsqueda con comillas dobles:

grep "'type' => 'select'"

7

No puede escapar de comillas simples que aparecen dentro de comillas simples. Como se explica en el [manual bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

El encerrar caracteres entre comillas simples ('' ') conserva el valor literal de cada carácter dentro de las comillas. Una comilla simple no puede aparecer entre comillas simples, incluso cuando está precedida por una barra invertida .

Entonces, tienes que usar diferentes enfoques:

  1. Use comillas dobles:

    grep  "'type' => 'select'" file 
    
  2. Si prefiere soluciones innecesariamente complejas:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Siempre puede buscar cualquier carácter individual en lugar de especificar las comillas simples:

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

Pero solo use ", hace las cosas mucho más sencillas.


¿Qué sucede si la cadena que estoy buscando está en un archivo php y contiene variables? Realmente estoy luchando con este.
Aubrey Robertson

@AubreyRobertson Necesitaría un ejemplo para responder correctamente. Si desea encontrar algo como la cadena $var, puede hacerlo grep '$var' file.phpentre comillas simples. Para más detalles, publique una nueva pregunta y déjeme un comentario aquí. Estaré encantado de ayudar.
terdon

Me lo imaginé. No fueron los signos de dólar los que me molestaron grep, fueron las referencias de matriz (corchetes) porque grep las usa para expresiones regulares. Esta es la línea que estaba tratando de grep: $output = $info['function']($variables); solo tuve que escapar de ellos correctamente con doble barra diagonal inversa. Este es mi comando grep después de todo lo dicho y hecho:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson

1

cd al directorio que contiene su archivo .txt

cd /path 

Luego :

puedes usar grep "'type' => 'select'" name.txt

o:

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

Salida:

ingrese la descripción de la imagen aquí


3
La pregunta solo se refiere a las comillas simples, no a la estructura del directorio ni a ninguna grepotra funcionalidad (ligeramente irrelevante).
Chris

@Chris, de hecho, con la -ropción (como escribe OP), el nombre del archivo no es necesario.
Brady Trainor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.