Tener una cadena de eco sed después del partido

Tener una cadena de eco sed después del partido

Necesito que /pbs.twimg.com\/profile_images\/se repita la cadena que sigue inmediatamente. Esto es para una herramienta de búsqueda que he creado con un poco de ayuda y que todos recomiendan.sed, pero realmente nunca usosedentonces no lo entiendo bien. Pero aquí está el guión:

read -r Username ;\
wget -q -O - https://twitter.com/"${Username}" | \
 sed -n '/data-screen-name=.'"${Username}"'".*data-user-id=/I \
    {s/^.*data-screen-name=.'"${Username}"'".*data-user-id="\([0-9]*\)".*$/\1/Ip;q}'

Este script funciona perfectamente para la mayoría de las cuentas, pero si la cuenta es privada, fallará. Si, en cambio, busca, /pbs.twimg.com\/profile_images\/solo aparecerá el ID y no generará diferentes variables como lo hace en el script original (es por eso que selecciona la fila con data-screem-name=No puedo usar elgorjeoAPI porque estoy exportando esto a personas que ni siquiera sabrían cómo obtener la API y por eso estoy tratando de hacerlo lo más simple posible para el usuario.

He revisado varias publicaciones SO/SE y no creo que sea un duplicado, lo siento si lo es.

EDITAR---- Esto no funciona en perfiles privados porque la línea a la que va no está dentro del HTML. Después de seguir leyendo, noté que /pbs.twimg.com\/profile_images\/proporciona la identificación del usuario y está tanto en cuentas privadas como en cuentas abiertas.

Data de muestra:
En este momento, si ejecutara esto en mi cuenta, funcionaría y verías mi ID:

Username="thematrix1o1"
717835108540030976

Pero si lo ejecuto en una cuenta privada no obtendré ninguna identificación (porque la línea no está ahí)

Username="touchmytweets"
.

(no hay ningún punto en el informe, solo está en blanco)

Aquí está la imagen con lo que necesito encontrar.https://i.stack.imgur.com/WSACJ.jpg Como puedes ver, su ID es:726618076633030656
Informe de muestra pequeña
ile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/726618076633030656\/wwYbLwbs_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/726618076633030656\/wwYbLwbs_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/418265825\/1463628965","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":n

Respuesta1

Su salida contiene cualquier cantidad de información aleatoria y una línea que le interesa. Seleccione esa línea, descarte todo menos el ID e imprima el resultado:

 sed -n '/profile_images/s/.*profile_images\\\/\([0-9]\+\).*/\1/p'

Esto podría hacerse un poco más eficiente saliendo inmediatamente después de que se haya procesado esa línea.

De hecho, eso es exactamente lo que hace el código original. Lo único que ha cambiado es la expresión regular utilizada.

Respuesta2

Cuando me enfrento a un trabajo de aguja en un pajar como este, me gusta convertirlo en un problema orientado a líneas, si puedo. Es posible que puedas hacerlo con algo como esto:

$ sed -E 's:[0-9]+:\n&\n:g' filename \
| grep -F -A1 '/pbs.twimg.com\/profile_images\' | tail -1 

Eso coloca cualquier cadena de dígitos en una línea por sí sola, busca su cadena e imprime la siguiente.

Es todo un truco; La forma correcta de analizar HTML es con un analizador HTML. Pero podría funcionar para entradas controladas donde solo se necesita una cadena.

Un enfoque un poco más claro usaría awk, definitivamente vale la pena aprenderlo si te ocupas mucho de este tipo de cosas.

información relacionada