2010-07-14 23 views
61

Estoy buscando una herramienta grep para buscar cadenas puramente literales. Estoy buscando la aparición de una línea de un archivo de registro, como parte de una línea en un archivo de registro independiente. El texto de búsqueda puede contener todo tipo de caracteres especiales de expresiones regulares, por ejemplo, []().*^$-\.Grep para cadenas literales

¿Hay alguna utilidad de búsqueda Unix que no use regex, pero solo busque ocurrencias literales de una cadena?

+0

Me pregunto por qué la pregunta no era _ "¿Puedo hacer que' grep' busque cadenas literales? "_ en lugar de _" ¿Hay algo como 'grep' que pueda buscar cadenas literales? _ Destornilladores de cabeza plana que se ajustan a los cabezales Phillips, usted saber ';)' – ADTC

Respuesta

88

Puede usar grep para eso, con la opción -F.

-F, --fixed-strings  PATTERN is a set of newline-separated fixed strings 
+0

* "cadenas fijas separadas por línea nueva" * ¿Cómo puedo hacer esto en el indicador de terminal? Sé que puedo crear un archivo de patrones, pero sin un archivo, ¿es posible hacerlo en el prompt? Presionando Enter obviamente ejecuta el comando. – ADTC

+3

* Responderé a mi propia pregunta. :) * Solo necesita proporcionar las múltiples cadenas fijas mediante repeticiones de la opción '-e'. De esta manera: 'grep -F -e" fixed1 "-e" fixed2 "-e" fixed3 "-e" fixed4 "'. No se requieren nuevas líneas;) – ADTC

+1

No disponible en Solaris. En cambio, se usa 'fgrep'. – majkinetor

2

Pase -F a grep.

7

Eso es bien fgrep o grep -F que no va a hacer expresiones regulares. fgrep es idéntica a grep -F pero yo prefiero no tener que preocuparse acerca de los argumentos, siendo intrínsecamente perezosa :-)

grep -> grep 
fgrep -> grep -F (fixed) 
egrep -> grep -E (extended) 
rgrep -> grep -r (recursive, on platforms that support it). 
+0

Para grep de GNU, fgrep es sólo proporciona como un enlace simbólico a grep que le hace tomar -F – Daenyth

+3

'' egrep' y fgrep 'no están especificados por el estándar POSIX; '' -F' grep y -E' grep [son] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html) –

3

también se puede usar awk, ya que tiene la capacidad de encontrar cadena fija, así como la programación capacidades, por ejemplo, sólo

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file 
0
cat list.txt 
one:hello:world 
two:2:nothello 

three:3:kudos 

grep --color=always -F"hello 

three" list.txt 

salida

one:hello:world 
three:3:kudos 
+1

Esto no añade nada a la respuesta aceptada existente. –

+0

No estoy de acuerdo. Es una ilustración útil de cómo funciona esto. – timwaagh