Re : Notas de grep de expresiones regulares para extraer URL de YouTube de texto continuo y luego usar yt-dlp ~¿No se puede escapar el ? (signo de interrogación)? ¡El capítulo de!~
Hola, soy un inútil.
Es el título de un artículo que no sé si es un manga o un anime, propio de un inútil.
Este artículo anterior.
https://soulminingrig.com/blog/連続したテキストからyoutube-url抜くだけでの正規表現grep/
En ese momento, estaba escribiendo otros scripts de web scraping y estaba medio muerto de sueño alrededor de las 4 de la mañana, así que tanto los comandos como el texto eran un desastre.
Lo resumiré de nuevo.
grep -oP ‘youtube\.com\/watch\?v\=…’ outbox.json > pyaa.txt
Lo anterior puede manejar expresiones regulares de Perl.
También es posible con lo siguiente
grep -oP ‘youtube\.com\/watch\?v\=.{11}’ outbox.json > pyaa.txt
Además, usar expresiones regulares de Perl puede ser bastante pesado, por lo que si hay muchos caracteres o si se usa dentro de un script, puede ser mejor usar un comando como el siguiente, si es posible.
grep -o ‘youtube\.com/watch?v=…’ outbox.json > pyaa.txt
Por cierto, ¿escapar el signo de interrogación solo es posible con expresiones regulares de Perl?
grep -o ‘youtube\.com/watch\?v=…’ outbox.json > owo.txt
Lo anterior no funciona.
Si esto se hace sin una barra invertida, coincidirá con "un carácter que aparece 0 o 1 vez antes del carácter".
Así que, investigando, parece que si se pone entre corchetes `[?]`, se puede tratar como una cadena de texto.
https://stackoverflow.com/questions/10602433/how-to-escape-a-question-mark-in-r
grep -o ‘youtube\.com/watch[?]v=…’ outbox.json > pyaa.txt
¡Con esto, todo bien!
¡Eliminemos las líneas que contienen "/" y "\" y "<" innecesarios!
Al principio, sospeché de mi comando grep, pero no era eso.
Por alguna razón, el archivo outbox.json exportado de las publicaciones de Mastodon produce la siguiente salida:
class=\"ellipsis\"\u003eyoutube.com/watch?v=DRVp_cmW3N\u003c/span\u003e\u003cspan class=\"invisible\"\u003es\u0026amp;feature=share7\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\",\"contentMap\":{\"ja\":\"\u003cp\u003e\u003ca
Si te fijas bien, ¡el último carácter (el undécimo) de la cadena W7G-QtbTWg ha desaparecido y se ha convertido en una barra invertida! Por supuesto, así no se puede generar una URL de guardado de URL correctamente.
youtube.com/watch?v=DRVp_cmW3Nw
youtube.com/watch?v=DRVp_cmW3N\
Afortunadamente, las URL que se muestran correctamente también se han extraído con grep de forma duplicada, así que solo tengo que eliminar las innecesarias.
Además, algunas tienen un '<' al final, ¿qué es esto...?
sed ‘/\\$\|\/$\|<$/d’ pyaa.txt > nyan.txt
Salida de líneas duplicadas y no duplicadas con uniq
uniq nyan.txt > nyanya.txt
uniq -u nyan.txt >> nyanya.txt
¡¡¡Hecho!!!
Finalmente, convertir a formato yt-dlp con sed
sed ‘s|youtube|yt-dlp -o “/media/ncp/yt/n/%(title)s” -f “bv[ext=mp4]+ba[ext=m4a]” –merge-output-format mp4 https://www.youtube|g’ nyanya.txt > nya.sh
¡Eso es todo! Buen trabajo.
El resto es añadir `#!/bin/bash`, dar permisos de ejecución y ejecutarlo. ¡Listo! No creo que nadie lo copie y pegue tal cual, pero no olvides cambiar el directorio de destino y otras configuraciones.
Finalmente, sobre el comando wc...
Pregunta anterior
echo “youtube.com/watch?v=g5HQFrSk4OA” | wc -c
32
Parece tener 32 dígitos.
Así que extraigo solo los de 32 dígitos.
grep -oP ‘^.{32}$’ mstv.txt > mstvtmp.txt
Y, aunque está escrito como si hubiera tenido éxito, no funcionó al volver a verificarlo. Funcionó cuando cambié 32 a 31. Eh, ¿por qué? Que alguien me lo explique.
Al parecer, cuando el comando `wc` cuenta caracteres en una cadena, también incluye el carácter de nueva línea, por lo que incluso un archivo vacío creado con `touch` muestra 1. Así que, al usarlo, hay que restar el número de líneas.
Hasta la próxima.
Saludos cordiales.