Как сохранить ключ RSA-4096 SSH в новом формате KPenssh в новом формате KPenssh

Это близко:

rpm -q --whatprovides "foo = 2"

но он не принимает версию. Чтобы получить это, вернитесь на шаг назад и отформатируйте вывод от

rpm -q --whatprovides foo

вот так:

rpm -q --queryformat "%{VERSION}:%{NAME}\n" --whatprovides foo

и отфильтруйте результат с помощью grep (чтобы выбрать "2"), а затем через sed, чтобы удалить лишнюю версию, за которой следует двоеточие:

grep -E '/^2:/' | sed -e 's/^[^:]*://'

Это дает только имя пакета. На практике вам нужны версия, релиз и архитектура, чтобы установить правильную зависимость.

Для справки: 5.2.5. Определение того, какой пакет предоставляет определенную возможность (Fedora RPM Guide)

По поводу замечания ОП о том, что awk был бы проще:

awk -F: '{ if ($1 == "2") print $2}'

Я согласен (но по привычке, работая над скриптами configure, использую awk вторым после grep/sed, поскольку он немного менее переносим). Однако, если нужно проверить наличие пакетов с версиями больше или равными заданному значению, awk, безусловно, будет намного проще, например,

awk -F: '{ if ($1 >= 2) print $2}'

Это пришло мне в голову сегодня утром, когда я уже ушел. Но такой тип сравнения, вероятно, более распространен в spec-файлах, чем точные совпадения. Кроме того, цитирование "2" может заставить awk рассматривать его как строку, а не как число. Это не будет соответствовать версии 2.0, но если оставить его без кавычек и в виде числа, то он будет соответствовать.

@dave-thompson-085 указал, что заключение сравнения в действие является излишним. То есть, часть внутри { и } в предшествующем является действием, для всех строк (так как шаблон не задан). Цитирую со страницы руководства mawk:

Программа AWK - это последовательность пар {действие} шаблонов и определений пользовательских функций.

и далее

   A pattern can be:
          BEGIN
          END
          expression
          expression , expression

Выражение может быть регулярным выражением, но также может быть сравнением. Он предложил следующее улучшение

awk -F: '$1>=2{print $2}'

1
10.07.2018, 10:02
0 ответов

Теги

Похожие вопросы