![Texto de análisis de script simple, ¿qué hay de malo aquí?](https://rvso.com/image/1344712/Texto%20de%20an%C3%A1lisis%20de%20script%20simple%2C%20%C2%BFqu%C3%A9%20hay%20de%20malo%20aqu%C3%AD%3F.png)
Soy un gran usuario dehttps://www.grc.com/contraseñas.htmpara obtener contraseñas seguras. Sin embargo, tener que ir al sitio y copiar manualmente la contraseña cada vez se vuelve obsoleto rápidamente, así que decidí hacer un pequeño script para hacerlo por mí. Cada vez que recargas la página, te presenta nuevas contraseñas en texto sin formato, así que este es el script.
curl 'https://www.grc.com/passwords.htm' | grep '63 random printable ASCII characters:' | sed 's/^.*size=2>//' | sed 's/<\/font>.*$//' | pbcopy
Como no hay clases de identificación o ID, obtengo la página a través de curl
, la canalizo para grep
obtener la línea que quiero ("63 caracteres ASCII imprimibles al azar:") y luego borro sed
todo hasta la contraseña, así como todo después de ello, finalmente copiando al portapapeles con pbcopy
.
Todo esto funciona bien, excepto por un pequeño detalle. La cadena que obtengo al final siempre debe tener 63 caracteres, pero no lo es. Suele variar entre 64, 67, 70 y 73 y no tengo idea de por qué.
¿Alguien puede aclarar esto?
Respuesta1
ComomusioComo ya hemos dicho, el problema es la codificación HTML de algunos caracteres especiales.
Perl puede convertirlos de forma fiable y sencilla:
curl 'https://www.grc.com/passwords.htm' | \
grep 'ASCII characters:' \
perl -MHTML::Entities -ne 's/.*2>|<.*//g; print decode_entities($_)'
Respuesta2
Podría tener que ver con la codificación HTML, donde, por ejemplo, a <
en los 63 caracteres en realidad se representa como la entidad <
en la fuente, lo que hace que la cadena sea un poco más larga.
Respuesta3
Aquí hay algo que debe considerar: la cadena resultante de su secuencia de comandos a menudo puede contener ciertos caracteres que no se escapan correctamente en las operaciones sed.
Por ejemplo, estos caracteres pueden ser sospechosos: corchetes, comillas simples y dobles, llaves, signos de exclamación, barras diagonales y posteriores, y asteriscos.
Intentaría eliminar uno de estos caracteres de la cadena devuelta en una serie de pruebas, comparando los resultados para ver si la eliminación de uno de cualquier número de estos caracteres llevará el recuento a 63.
Respuesta4
Según su comentario a mousio, su cadena de grep/sed... se puede reducir a un comando:
Perl suele instalarse de forma predeterminada
perl -ne 'next unless /63 random printable ASCII characters:/; s/^.*size=2>//; s/<\/font>.*$//; s/"/"/g; s/'/'\''/g; s/&/&/g; s/</</g; s/>/>/g; print; exit'
No todos los sed entienden esta sintaxis
sed -n '/63 random printable ASCII characters:/{s/^.*size=2>//; s/<\/font>.*$//; s/"/"/g; s/'/'\''/g; s/&/\&/g; s/</</g; s/>/>/g; p;q}'