2011-08-04 8 views
6

Estoy tratando de escanear un registro de errores para líneas con errores 503, por lo que estoy reduciendo para " 503 (espacio de cotización 503).Grep con las comillas

Esto parece simple, pero no va a funcionar:

grep '" 503 ' access.log 

me sale el siguiente error:

bash: -c: line 0: unexpected EOF while looking for matching `"' bash: -c: line 1: syntax error: unexpected end of file

+1

Esto debería funcionar. ¿Seguro que no alias grep o algo así? "¿qué grep"? "tipo grep"? – pyroscope

+0

El mensaje de error muestra "bash -c", entonces ¿estás haciendo algo así como intentar insertar comillas simples dentro de comillas simples? –

+0

Hmm, funciona para mí en bash exactamente como lo tiene –

Respuesta

0

El problema se debió a algunas directivas erróneas en .bashrc.

8

parece que lo está ejecutando a través de algún sistema() en algún lenguaje, ¿no es así? Proveedores:

grep '\" 503 ' access.log 

o:

grep "\" 503 " access.log 

directamente con cáscara simplemente grep '" 503 ' access.log va a funcionar. Para reproducir su problema debo hacerlo:

bash -c 'grep '\" 503 ' access.log' 

Esto es de hecho un error de sintaxis. Para hacer que el trabajo, necesito:

bash -c 'grep "\" 503 " access.log' 

de alguna manera están llamando bash -c .... Quizás indirectamente. Necesitas calcular cómo se llama para descubrir qué citas están en colisión.

+0

No, directamente en el caparazón. He intentado con los dos ejemplos que sugieres sin suerte. – dtbarne

+0

esto es extraño. ¿Se puede publicar la salida de "tipo grep" y "echo $ 0"? –

1

Para depurar efectos extraños como este, use "set -x" para mostrar las expansiones de shell, y lo que la computadora piensa acerca de su comando.

0

Creo que lo tengo trabajando ahora (no estoy seguro porque no obtuve ningún resultado, pero no obtuve ningún error).

La razón es porque estoy pasándolo a través de un comando ssh como el siguiente y creo que SSH está haciendo algún escape engaño:

ssh 123.123.123.123 grep '" 503 ' access.log 

Modificaciones con él a esta parece ser la solución:

ssh 123.123.123.123 "grep '\" 503 ' access.log" 

Gracias por el tiempo de todos.

+2

No es ssh quien está haciendo el truco, es el caparazón. Su shell local interpreta las comillas simples, y las quita del argumento ''" 503' ', luego pasa esos argumentos a ssh. Ssh luego pasa los argumentos que obtuvo, sin cambios, al shell en el sistema remoto. un personaje de comillas dobles sin igual. (Probablemente hay algo más que eso, pero esa es la idea general.) –

+0

@Keith es exactamente correcto.Como su comando se interpreta dos veces (una por su shell local y una segunda vez por la shell remota), cualquier cosa que normalmente se debe citar una vez debe en su lugar citarse dos veces. – jw013

+0

Gracias, sin embargo, estaba al tanto de eso. Simplemente era más fácil llamarlo engaño. :) – dtbarne

Cuestiones relacionadas