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.

Jofsey
fuente
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
Marco
fuente
@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.

slhck
fuente
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
ErichBSchulz
fuente
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
vstepaniuk
fuente