2011-09-14 8 views
5

Estoy escribiendo un guión que tiene comandos para ejecutar la siguiente manera:EOF inesperado en la búsqueda de coincidencia `"'

cat /abc | grep -v ^# | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\'' 

Cuando se ejecuta la secuencia de comandos de SunOS, estoy consiguiendo abajo de error:

test: line 1: unexpected EOF while looking for matching `"' 
test: line 3: syntax error: unexpected end of file 

intentado con opción diferente .. pero no hubo suerte.

Necesita alguien ayudarme a identificar lo que falta en el comando anterior.

+0

¿Qué estás tratando de hacer? En otras palabras, ¿cuál es su entrada y salida? Tengo la sensación de que puedes lograr tu tarea solo con awk. –

Respuesta

2

¿Qué son esos escapes?

cat /abc | grep -v '^#' | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\'' 
               ^  ^  ^   ^

Su problema es que hay:

sed -e '\''s/"//g'\'' 
      ^unmatched 
+0

¿Es que la comilla doble en la expresión está causando este error? – Mrun

+0

Intenté con el siguiente: cat/abc | grep -v^# | grep -i root | sed -e \ 's/\ "// g \' | awk \ '{print $ 2} \' el o/p es: bash-2.05 # bash -x -v test cat/abc | grep - v^# | grep -i root | sed-e \ 's/\ "// g \' | awk \ '{print $ 2} \' + cat/ + grep -v '^ #' + grep -i root + sed-e '' \ '' s/"// g '\' '' Comando no reconocido: 's/"// g' + awk '' \ '' {print ''} '\' '' awk: error de sintaxis cerca de la línea 1 awk: rescate cerca de la línea 1 – Mrun

+0

¿Cómo escapo? una sola cita en el guion? – Mrun

0

La cita es todo mal. ¿Por qué usa comillas simples, barras invertidas, comillas simples, comillas simples, y siempre en ese orden? De todos modos, tiene una comilla doble sin comillas, por lo que la shell espera que agregue una cotización de cierre para la cadena entre comillas que comienza con esa comilla doble de apertura.

Como una cuestión de estilo, también debe perder el Useless Use of Cat, y pensar en cómo simplificar su secuencia de comandos. Al menos:

grep -v ^# /abc | grep -i root | sed -e 's/"//g' | awk '{print $2}' 

... pero en la práctica

awk '/^#/ { next } /[Rr][Oo][Oo][Tt]/ { gsub ("\"",""); print $2 }' /abc 

Debido a que algunos de los personajes de los awk y sed guiones tienen un significado especial para el shell, los ponemos entre comillas simples. Si necesita tener comillas simples en una secuencia de comandos, debe doblarlas; un patrón frecuente es tener una cadena en comillas simples adyacentes a una cadena entre comillas dobles, como esta: echo '"'"'". Esto muestra " (entre comillas simples) seguido inmediatamente por ' (entre comillas dobles).

Editar Análisis actualizado del problema de las citas; ejemplo de código agregado; ejemplo de código corregido. La edición final corrige las citas de gsub en awk script, y agrega una pequeña discusión de las citas.

+0

no es una comilla doble '" ', son solo dos comillas simples una al lado de la otra ('' ->' '' '). No tiene sentido. – c00kiemon5ter

+0

sed-e 's /" // g' en esto, la las comillas simples se escapan utilizando \, sin embargo, la barra invertida se incluye entre comillas simples. – Mrun

+0

@ c00kiemon5ter Noté y edité mi respuesta antes de ver su comentario. – tripleee

Cuestiones relacionadas