2012-10-05 79 views
5

Necesito ayuda con Unix. Estoy tratando de ver si una de las dos afirmaciones (printf y fprintf) está en un archivo. Utilicé el comando:Grep O el operador no funciona

search=`cat $file | grep -w "fprintf\|printf"` 

Por alguna razón, tampoco se encuentra en los archivos donde existe uno de esos dos. ¿Por qué?

+0

¿Por qué no se le cae la bandera expresión regular palabra, '-w'? – Steve

+2

[UUOC] (http://catb.org/jargon/html/U/UUOC.html) - Tenga en cuenta que debe utilizar 'search = $ (grep -w -E -e" f? Printf "$ file) 'o algo similar en lugar de perder el tiempo con' cat' y una pipa. –

Respuesta

7

Tiene dos problemas.

En primer lugar, standard grep no es compatible con el operador |. Debe usar egrep o la bandera -E.

Segundo, dentro de las comillas dobles, \| significa \|. La barra diagonal inversa se pasa al comando grep, por lo que incluso si grep entendió el operador |, la barra diagonal inversa lo convertiría en un carácter normal.

Prueba esto:

search=`cat $file | egrep -w "fprintf|printf"` 

O puede proporcionar cada alternativa como un argumento separado a grep:

search=`cat $file | grep -w -e fprintf -e printf 
+2

GNU grep lo soporta muy bien. – paxdiablo

+0

Gracias! Todavía soy nuevo en Unix. –

+0

Si estuviera usando GNU grep, su comando habría coincidido. El estándar 'grep' no trata a' \ | 'la forma en que' egrep' trata a '|'. –

0
grep -w "fprintf\|printf" $file 

Esto funciona bien en mi caparazón. Sin embargo, aquí hay algunas alternativas:

egrep -w 'fprintf|printf' $file 
grep -wE 'fprintf|printf' $file 
grep -we 'fprintf\|printf' $file