Обратите внимание на сообщение об ошибке: в нем не говорится, что секретный ключ отсутствует (это не так), а говорится, что отсутствует открытый ключ.
gpg: key 71980D35:
секретный ключ без открытого ключа - пропущено
В RSA некоторые числа (d, p, q, u) являются частными, а другие (n, e) открытыми. Только 2 общедоступных номера необходимы для шифрования и проверки подписи, тогда как все 6 номеров необходимы для расшифровки и подписи. Таким образом, для последних операций вам действительно понадобятся как секретный, так и открытый ключи.
Открытый ключ был удален из публикации
случайно?
Вы можете попробовать повторно импортировать открытый ключ. Поскольку открытый ключ является широко распространенным, его должно быть легко получить повторно.
Я считаю, что следующий -вкладыш должен работать:
L=`grep -h "ER" * | grep -v Cheese | wc -L`; grep -h "ER" * | grep -v Cheese | grep -P ".{$L}"
Первая команда находит все строки в файлах в каталоге, содержащем «ER» (вам нужна только опция -R
, если у вас есть подкаталоги, иначе глобус *
— это все, что вам нужно ), удаляет строки с помощью Cheese, а затем находит самую длинную из этих строк с помощью команды wc -L
.
Вторая команда (увы )снова выполняет поиск соответствующих строк, но затем ищет строки максимальной длины. Вам может не понадобиться опция -P
для grep, в зависимости от вашей версии grep.
Вот awk-решение:
awk '/ER/ && !/Cheese/ {if (length($0) > maxlen) { maxline=$0; maxlen=length($0);}} END {print maxlen, maxline;}' *
(он также печатает длину самой длинной строки, но если вы этого не хотите, просто скажите ... END {print maxline;}
.
Преимущество решения Джереми Довера над grep в том, что оно выполняет один проход по входным данным. Недостатком является то, что если есть несколько строк с одинаковой максимальной длиной, печатается только первая (или последняя, если вы используете >= для сравнения длин ); решение grep печатает их все.
Эта строка сделает то, что вы просите (для файлов в одном каталоге):
awk '{l=length($0)}/ER/&&!/Cheese/&&(length($0)>l){l=length($0);line=$0}END{print(line)}' *
Если есть несколько совпадающих строк, будет напечатана только первая строка, которая содержит ER, а не Cheese и длиннее, чем ранее выбранная строка.
Кроме того, это будет сканировать файлы в pwd (*). Если вам нужна рекурсия, файлы нужно будет выбирать с помощью команды find.
find. -type f -iname '*.sh' -exec sh -c 'awk '\''{l=length($0)}/ER/&&!/Cheese/&&(l>lm){lm=l;li=$0}END{print(li)}'\'' "$@"' awksh {} +
Или в несколько строк (для удобства чтения):
find. -type f -iname '*.sh' -exec sh -c '\
awk '\''{l=length($0)}/ER/&&!/Cheese/&&(l>lm){lm=l;li=$0}END{print(li)}'\'\
' "$@"' awksh {} +
Тот, который добавляет длину строки в начало, выполняет численную сортировку и печатает второе поле первого результата, чтобы вернуть исходную строку.
grep -h ER * | grep -v Cheese | awk '{ print length($0) " " $0}' | sort -nr| head -1| awk '{print $2}'
Этот подход позволяет выполнять более сложные запросы, чем «MAX» или «MIN», если вам это нужно. Обратите внимание на использование AWK. Это именно то, для чего он действительно хорош.