Cómo combinar wget y grep


11

Tengo una URL de página html y quiero aprovecharla. ¿Cómo puedo hacerlo wget someArgs | grep keyword?

Mi primera idea fue wget -q -O - url | grep keyword, pero la salida de wget omite grep y surge en la terminal en su forma original.


grep selecciona líneas delimitadas por (por ejemplo) caracteres de retorno de carro y salto de línea, una respuesta HTML no tiene líneas, tiene texto con marcas como <br> o <p>, por lo que toda la página web podría verse como una línea para grep
RedGrittyBrick

1
@RedGrittyBrick El comando del OP funciona perfectamente para mí.
slhck

Respuestas:


11

La forma más fácil es usar curlcon la opción -sde silencio:

curl -s http://somepage.com | grep whatever

@slhck: Ambos comandos hacen exactamente lo mismo para mí.
Dennis

Trate @Dennis curling http://superuser.com/questions/431581. Por alguna razón, lo probé con esta URL en particular y no obtuve salida. No sé lo que me estoy perdiendo.
slhck

@slhck: Curl no sigue las redirecciones por defecto. Lo hace con el -Linterruptor.
Dennis

@ Dennis No sabía de qué estaba hablando sin ver los comentarios eliminados, pero sí, eso tiene sentido. Gracias por aclararme.
slhck

1
La pregunta pide wget. No rizo Esto no funcionará con múltiples redirecciones y la opción -L.
Ligemer

11

Mantener esto por el bien de la integridad.

Tu ejemplo debería funcionar realmente. La sintaxis es correcta, y aquí hay un screencast que acabo de tomar para demostrarlo , con una buena wgetversión anterior de GNU 1.13.4.

wget -q some-url -O - | grep something

Así que suponga que su patrón es incorrecto y grepsolo mostrará todo lo que obtuvo.


También podría ser un error tipográfico en la URL. Con -q, no hay mensaje de error.
Dennis


3

Si está buscando grep o encabezados de tubería, están dirigidos de manera estándar a stderr, por lo que debe redirigirlos. P.ej:

wget -O - http://example.com/page.php > /dev/null 2>&1 | grep HTTP

2
Esta es la forma correcta de hacerlo, ¡gracias!
Udayraj Deshmukh

Ver también las respuestas aquí
Suzana

0

El wgetescribe su salida para stderr no hacerlo stdout, por lo que uno debe redirigir el stderra stdout:

wget -q -O - url 2&>1 | grep keyword
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.