Ви неправильно зрозуміли синтаксис регулярного вираження. rsa.{3,13}
підказки для рядків, починаючи з цього rsa
, після чого слід від 3 до 13 повторів будь-якого символу ( .
є символом підстановки у регулярних виразах).
Для отримання ідентифікатора ключа використовуйте групи відповідності. Ви не можете зробити це за допомогою одного оператора grep, або потрібно використовувати два з них або перейти на інший інструмент, наприклад sed, або шукати інші способи вирішення проблеми. Використовуючи GNU grep, який підтримує -P
параметр, який ви вже використовували для регулярних виразів стилю perl, ви можете використовувати lookahead та lookbehind для досягнення того, що ви намагаєтеся зробити:
echo 'rsa2048/2642B5CD' | grep -o -P '(?<=rsa2048/)[[:xdigit:]]{8}'
Це лише один спосіб досягти бажаного результату, і існує безліч інших можливих способів. Наведене вище, мабуть, одне з найчистіших, альтернативою може бути просто вирізання ідентифікатора:
echo 'rsa2048/2642B5CD' | grep -o -P 'rsa.{3,13}' | cut -d/ -f2
У будь-якому випадку, для створення сценаріїв ви повинні --with-colons
вирішити відокремлену товсту кишку, досягнуту за допомогою , що набагато краще проаналізувати. Далі перелічені всі ключі, а потім фільтри для відкритих ключів (починаючи з початку кожного рядка з використанням ^
), не піклуючись про дійсність ключа, але фільтруючи ключі RSA (поле 4, ідентифікатор алгоритму 1) розміром 2048 біт і, нарешті, вирізаємо поле 5, який містить ідентифікатор ключа.
gpg2 --with-colons --list-keys | grep '^pub:[[:alpha:]]:2048:1:' | cut -d: -f5