Ich bin ein großer Benutzer von https://www.grc.com/passwords.htm um sichere Passwörter zu erhalten. Da ich jedoch jedes Mal auf die Website gehen und das Kennwort manuell kopieren muss, wird es schnell alt, weshalb ich mich dazu entschied, ein kleines Skript für mich zu erstellen. Jedes Mal, wenn Sie die Seite neu laden, werden neue Passwörter im Klartext angezeigt. Dies ist also das Skript.
curl ' https://www.grc.com/passwords.htm '| grep '63 zufällig druckbare ASCII-Zeichen: '| sed 's /^.* size = 2 & gt; //' | sed 's / & lt; \ / font & gt;. * $ //' | pbcopy
Da es keine identifizierenden Klassen oder IDs gibt, bringe ich die Seite durch curl
, Pfeife es an grep
um die gewünschte Zeile zu erhalten ("63 zufällige druckbare ASCII-Zeichen:"), und dann verwende ich sed
um alles bis zum Passwort zu löschen, sowie alles danach, schließlich mit in die Zwischenablage kopieren pbcopy
.
Alles funktioniert gut, bis auf ein kleines Detail. Die Zeichenfolge, die ich am Ende bekomme, sollte immer 63 Zeichen lang sein, ist es aber nicht. Es variiert normalerweise zwischen 64, 67, 70 und 73 und ich habe keine Ahnung, warum.
Kann jemand etwas Licht auf dieses werfen?
Antworten:
Wie Mousio Das Problem ist bereits die HTML-Kodierung einiger Sonderzeichen.
Perl kann diese zuverlässig und einfach konvertieren:
quelle
grep
gibt mir einen Fehler (der-P
Option existiert nicht). Wahrscheinlich benutzen wir verschiedene Versionen davon (ich bin unter OSX).perl
Jetzt kann ich diesen Befehl lesen und nur verstehen, was er tut, und er ist viel effizienter als mein ausführlich ausführlicher Befehl. Danke, als die neue beste Antwort markiert.Es könnte sich um die HTML-Codierung handeln, bei der z. ein
<
in den 63 Zeichen wird tatsächlich als Entität dargestellt<
in der Quelle, wodurch Ihre Saite etwas länger wird.quelle
curl "https://www.grc.com/passwords.htm" | grep "63 random printable ASCII characters:" | sed "s/^.*size=2>//" | sed "s/<\/font>.*$//" | sed "s/"/\"/g" | sed "s/'/'/g" | sed "s/&/&/g" | sed "s/</</g" | sed "s/>/>/g" | pbcopy
. Wenn Sie eine weniger ausführliche Vorgehensweise kennen, würde ich es schätzen (sofern keine Werkzeuge erforderlich sind, die standardmäßig nicht installiert sind).Beachten Sie Folgendes: Die resultierende Zeichenfolge Ihres Skripts enthält möglicherweise bestimmte Zeichen, die in den sed-Vorgängen nicht ordnungsgemäß maskiert werden.
Diese Zeichen können zum Beispiel verdächtig sein: Klammern, einfache und doppelte Anführungszeichen, geschweifte Klammern, Ausrufezeichen und der Vorwärts- und Rückwärtsstrich sowie Sternchen.
Ich würde versuchen, eines dieser Zeichen aus der zurückgegebenen Zeichenfolge in einer Reihe von Tests zu entfernen und die Ergebnisse zu vergleichen, um zu sehen, ob das Entfernen eines beliebigen Zeichens einer beliebigen Anzahl dieser Zeichen die Zählung auf 63 bringt.
quelle
sed
Operationen wurden einzeln durchgeführt und getestet, während ich mitging. Siehe die Antwort von mousio, er fand das Problem, es hatte mit HTML-Zeichen zu tun, die eine spezielle Kodierung haben.Basierend auf Ihrem Kommentar zu mousio kann Ihre Kette von grep / sed auf einen Befehl reduziert werden:
Perl wird normalerweise standardmäßig installiert
Nicht alle Sed verstehen diese Syntax
quelle