Você não compreende a sintaxe da expressão regular. rsa.{3,13}
greps para strings que começam com rsa
, seguido por 3 a 13 repetições de qualquer caractere ( .
é o caractere curinga em expressões regulares).
Para obter o ID da chave, use grupos de correspondência. Você não pode fazer isso usando uma única instrução grep, e deve usar dois deles ou mudar para outra ferramenta, por exemplo, sed ou procurar outras maneiras de resolver o problema. Usando o GNU grep, que suporta o parâmetro -P
que você já usou para expressões regulares no estilo do perl, você pode usar lookahead e lookbehind para alcançar o que está tentando fazer:
echo 'rsa2048/2642B5CD' | grep -o -P '(?<=rsa2048/)[[:xdigit:]]{8}'
Esta é apenas uma maneira de alcançar o resultado desejado, e há muitas outras maneiras possíveis. O acima é provavelmente um dos mais limpos, uma alternativa pode ser simplesmente cortar o ID:
echo 'rsa2048/2642B5CD' | grep -o -P 'rsa.{3,13}' | cut -d/ -f2
De qualquer forma, para fins de script, você deve ir para a saída separada por dois pontos alcançada com --with-colons
, que é muito mais fácil de ser analisada. A seguir lista todas as chaves e, em seguida, filtros para chaves públicas (iniciando no início de cada linha usando ^
), sem importar a validade da chave, mas filtrando chaves RSA (campo 4, ID do algoritmo 1) de tamanho 2048 bits e finalmente corta o campo 5, que contém o ID da chave.
gpg2 --with-colons --list-keys | grep '^pub:[[:alpha:]]:2048:1:' | cut -d: -f5