Foros del Web » Administración de Sistemas » Unix / Linux »

Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

Estas en el tema de Grep: expresion regular para extraer la cadena de busqueda de una URL de Google en el foro de Unix / Linux en Foros del Web. Hola a todos. Tengo el extracto de un log de un servidor apache, que contiene las cadenas de los referers de los accesos, de los ...
  #1 (permalink)  
Antiguo 23/01/2007, 16:51
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

Hola a todos.
Tengo el extracto de un log de un servidor apache, que contiene las cadenas de los referers de los accesos, de los cuales quiero extraer las cadenas de busqueda de google.

Quiero hacerlo con grep y expresiones regulares porque me agarró capricho por las regex.
Nota: Lo pregunto desde el enfoque de bash scripting para que no quede off topic. Luego voy a trasladar la expresion regular a un PHP.

Hasta ahora tengo esto:

Código:
cat access_log | grep --color -e "[\?|&]q=.*&"
Lo que me devuelve, por ejemplo:
Código:
http://www.google.com.ar/search?hl=es&q=zona+tux&btnG=B%C3%BAsqueda+en+Google&meta=
http://www.google.es/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-45,GGGL:es&q=ZONATUX
http://www.google.cl/search?hl=es&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=repositorios+mandriva+seerofsouls&spell=1
Ahora, no puedo lograr que la busqueda llegue hasta el siguiente simbolo "&", como ven llega hasta el anterior a "meta".
En PHP me pasa lo mismo.

¿Alguien con alguna idea?
PD: Ya probe decodificando la URL de los caracteres con '%' pero pasa lo mismo con algunas urls...
Saludos!!!
__________________
¡Volviendo a la programación!
  #2 (permalink)  
Antiguo 24/01/2007, 08:23
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 21 años, 9 meses
Puntos: 29
Re: Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

Ahora no estoy muy puesto en la parte de expresiones regulares pero defintivamente deberías intentar con un grep especial para REGEX como es el egrep que tiene muchas más opciones para manejar expresiones regulares que el simple grep. O también con la E mayúscula

Cita:
grep -E
Saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #3 (permalink)  
Antiguo 25/01/2007, 23:07
pablasso
Invitado
 
Mensajes: n/a
Puntos:
Re: Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

no capto bien que intentas hacer.. extraer exactamente que? podrias poner una parte del log original de donde estas extrayendo ademas del resultado del grep?
  #4 (permalink)  
Antiguo 26/01/2007, 13:44
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Re: Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

Antes que nada, les comento que el asunto lo solucione directamente en la consulta MySQL (ya que tengo los logs alli).
Código:
SELECT
	searchQuery,
	COUNT(searchQuery) as countSQ
FROM (
	SELECT
		@fq := SUBSTR(referer, INSTR(referer,'q=') + 2) as fq,
		@sq := SUBSTR(@fq, 1, instr(@fq, '&') -1) as sq,
		IF (@sq = '', @fq, @sq) as searchQuery
	FROM
		combined
	WHERE
		domain = '$d' and
		(referer regexp 'google' or
		referer regexp 'live.com' or
		referer regexp 'msn') and
		referer regexp 'search'
	UNION
	SELECT
		@fq := SUBSTR(referer, INSTR(referer,'p=') + 2) as fq,
		@sq := SUBSTR(@fq, 1, instr(@fq, '&') -1) as sq,
		IF (@sq = '', @fq, @sq) as searchQuery
	FROM
		combined
	WHERE
		domain = '$d' and
		referer regexp 'yahoo' and
		referer regexp 'search'
	) tableQ
GROUP BY
	searchQuery
ORDER BY
	countSQ DESC
Volviendo a Linux y Shell Scripting, Igualmente me gustaria seguir con este tema solo para aprender un poco mas de expresiones regulares en shell scripting.

Ahora que estaba leyendo en otro mensaje que publicaste, me habia olvidado de sed!!! ¿Servirá para esto?

El log es lo que muestro en el resultado, es un acrivho de texto con los referers que recibe el apache cuando algun usuario hace una busqueda en google y desde alli entra a mis webs.

Yo quiero obtener una lista de las busquedas en otro archivito de texto, que quede asi (siguiendo el ejemplo de arriba)
Código:
zona+tux
ZONATUX
repositorios+mandriva+seerofsouls
Como ves, son las cadenas que estan inmediatamente despues de "q=" en la cadena completa.

Saludos!
__________________
¡Volviendo a la programación!
  #5 (permalink)  
Antiguo 26/01/2007, 15:58
pablasso
Invitado
 
Mensajes: n/a
Puntos:
Re: Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

mmm no, si tiene expresiones regulares, pero sed mas bien lo utilizo para cuando necesito reemplazar algo en un archivo de texto

no se como puedas extraer los 'matches' de una expresion regular con grep, por lo que yo usuaria mejor glark para este caso, por ej hacer un:

Código:
glark -N --extract-matches '&q=([a-zA-Z0-9+]+)' access_log > output
haria que output consiguiera lo siguiente:

Código:
zona+tux
ZONATUX
repositorios+mandriva+seerofsouls
basicamente le dices que extraiga lo que esta entre parentesis, que es cualquier cosa alfanumerica y con simbolos de '+' hasta que encuentra un caracter diferente, en este caso & o simplemente un salto de linea como en el caso de ZONATUX que no tiene nada por delante

de seguro lo tienes que refinar para adecuarlo a mas simbolos diferentes, pero te puede servir de base

saludos!
  #6 (permalink)  
Antiguo 26/01/2007, 16:11
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Re: Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

No funciona del todo bien, pero creo que esto es un buen comienzo:

cat access_log | grep -o "&q=.*" | sed -e 's/&q=//g' -e 's/&//g' -e 's/+/ /g'

Que da el siguiente resultado:

zona tuxbtnG=B%C3%BAsqueda en Googlemeta=
ZONATUX
repositorios mandriva seerofsoulsspell=1


Post-edición: ¡Caca! Se me ha adelantado Pablasso.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #7 (permalink)  
Antiguo 27/01/2007, 07:12
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Re: Grep: expresion regular para extraer la cadena de busqueda de una URL de Google

Uh, gacias por la data.
No se me habia ocurrido lo de sólo tomar caracteres y numeros.
Creo que la solucion de pablaso funciona ok, voy a probarla con todo el log completo y les aviso. Ahora no tengo acceso.

Curioso: glark no esta en los repositorios de Mandriva
Tuve que instalarlo armando el RPM desde el src.rpm, pero fue muy facil.

Saludos!
__________________
¡Volviendo a la programación!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:40.