2010-09-09 26 views

Respuesta

37

Depende. Si utiliza grep regular, no escapar:

echo '(foo)'|grep '(fo*)' 

que realmente tiene que escapar si desea utilizar los paréntesis, como agrupación.

Si utiliza extended regular expressions, que escapan:

echo '(foo)'|grep -E '\(fo*\)' 
+1

Cuando uso grep -rin init() * en el directorio se queja de un error de sintaxis cerca del token inesperado (. ¿Cómo lo soluciono? –

+0

Lo siento, no lo entiendo. Tengo algunos archivos javascript, con un La función init() se llama en algunos lugares en ellos. Quiero saber dónde se llama a init(), usando grep -rin init() * en el directorio ... Se queja de una sintaxis no válida cerca de (. ¿Cómo puedo escapar ( –

+3

@Megha, solo para aclarar, ese fue un error de shell porque no citaron la expresión regular. –

4
$ echo "init()" | grep -Erin 'init\([^)]*\)' 
1:init() 

$ echo "init(test)" | grep -Erin 'init\([^)]*\)' 
1:init(test) 

$ echo "initwhat" | grep -Erin 'init\([^)]*\)' 
+0

Esto es incorrecto. Igualmente emparejará "initwhatever", ya que por defecto los parens invertidos crean grupos de captura. Como dije antes, no escapas de parens con grep regular. –

+0

Creo que esto está bien porque la '-E' es equivalente a egrep. – gkanwar

1

Mover a su directorio raíz (si son conscientes de donde están los archivos JavaScript son). Entonces haz lo siguiente.

grep 'init()' *.js 
+0

para grep en todas las subcarpetas recursivamente, sugiera agregar parámetro -r – hejiaming007

18

Si desea buscar exactamente con la cadena "init()" y utilice fgrep "init()" o grep -F "init()".

Ambos harán una coincidencia de cadena fija, es decir, tratarán el patrón como una cadena simple para buscar y no como una expresión regular. Creo que también es más rápido que hacer una búsqueda de expresiones regulares.