Sie haben die Syntax für reguläre Ausdrücke nicht richtig verstanden. rsa.
greps für Zeichenfolgen, die mit beginnen rsa
, gefolgt von 3 bis 13 Wiederholungen eines beliebigen Zeichens ( .
ist das Platzhalterzeichen in regulären Ausdrücken).
Verwenden Sie Übereinstimmungsgruppen, um die Schlüssel-ID zu ermitteln. Sie können dies nicht mit einer einzigen grep-Anweisung tun, und Sie müssen entweder zwei von ihnen verwenden oder zu einem anderen Tool wechseln, z. B. sed, oder nach anderen Möglichkeiten suchen, um das Problem zu lösen. Mit GNU grep, das die -P
Parameter unterstützt, die Sie bereits für reguläre Ausdrücke im Perl-Stil verwendet haben, können Sie lookahead und lookbehind verwenden, um das zu erreichen, was Sie zu tun versuchen:
echo 'rsa2048/2642B5CD' | grep -o -P '(?<=rsa2048/)[[:xdigit:]]'
Dies ist nur ein Weg, um das gewünschte Ergebnis zu erzielen, und es gibt viele andere Möglichkeiten. Die oben genannte ist wahrscheinlich eine der saubersten, eine Alternative könnte das Abschneiden der ID sein:
echo 'rsa2048/2642B5CD' | grep -o -P 'rsa.' | cut -d/ -f2
Jedenfalls sollten Sie sich für die --with-colons
Skripterstellung für die mit Doppelpunkt getrennte Ausgabe entscheiden, die viel besser analysiert werden kann. Im Folgenden werden alle Schlüssel aufgelistet und anschließend nach öffentlichen Schlüsseln (beginnend am Anfang jeder Zeile ^
) gefiltert, ohne dass die Gültigkeit des Schlüssels beachtet wird. RSA-Schlüssel (Feld 4, Algorithmus-ID 1) der Größe 2048 Bit werden jedoch gefiltert und das Feld wird schließlich abgeschnitten 5, die die Schlüssel-ID enthält.
gpg2 --with-colons --list-keys | grep '^pub:[[:alpha:]]:2048:1:' | cut -d: -f5