Лучший способ замены текста

libssl1.0.2и libssl1.0.0— разные пакеты, предоставляющие несовместимые библиотеки; Вот почему вы не можете удовлетворить зависимость libssl1.0.0с помощью libssl1.0.2.

Чтобы удовлетворить требования вашего пакета, я предлагаю добавить репозитории Debian 8 в вашу конфигурацию, так как Debian 8 по-прежнему поддерживается (, поэтому при необходимости вы получите обновления безопасности ). Для этого отредактируйте файл /etc/apt/sources.listи скопируйте каждую строку stretch, заменив stretchна jessie(, чтобы в итоге вы получили обе строкиstretchи jessie). Затем запустите apt update, и apt install libssl1.0.0должно заработать.

Кроме того, вы можете загрузить пакет,(найти свою архитектуру внизу страницы )и установить его с помощью dpkg -i.

В обоих случаях apt-mark auto libssl1.0.0поможет :таким образом, что пакет будет рассмотрен для автоматического -удаления, если он станет ненужным в будущем.

0
22.01.2020, 19:03
1 ответ

Я предполагаю, что вы анализируете вывод rpmв режиме проверки, поэтому были сделаны некоторые незначительные корректировки (, хотя я не уверен насчет строки «не принадлежит» ). Поддержка обработки "?" для неудавшегося теста здесь не .

Основные проблемы с вашим подходом заключаются в том, что не следует (вообще )пытаться постепенно обрабатывать данные по мере их изменения; и что "." в строках, которые вы сопоставляете, является подстановочным знаком регулярного выражения, который затем может соответствовать измененным данным. например. /.M......./в качестве регулярного выражения будет соответствовать «.M.......», «Mode differs», «MD5 sum» и т. д. (и т. д., если IGNORECASEне равно 0 в GNU awk.)

Еще одна проблема заключается в количестве перестановок, сопоставить их все программно нецелесообразно.

Этот код работает следующим образом:

  • создать массив сообщений desc[], проиндексированный "XY", где X— позиция символа, а Y— буквальный символ
  • преобразует индекс из «XY» в «...Y.....», где Y находится в позиции X (вы, конечно, можете сделать это самостоятельно, но это утомительно и чревато ошибками¹)
  • читает каждую строку ввода, пытается сопоставить каждый шаблон индекса по очереди,и накапливает соответствующее сообщение вoutput[]
  • сводит output[]в список, разделенный запятыми -
  • выводит результат на -строку ввода

В случае, если вы не знакомы, конструкция (expression) ? "true" : "false"используется здесь для вставки (или без )запятых или множественного числа в конце «s», если это необходимо, с сохранением if/elseи дублированием. "........."— это волшебная строка, а 9 — это волшебное число (вы можете изменить их, если ваш вывод rpmдействительно устарел и в нем отсутствует «P» в качестве 9-го столбца ).

«%.*s» в printf()позволяет выбрать префикс переменной длины заполнения "........."с каждой стороны. Для позиции N (, начинающейся с 1 ), он выводит N -1 символов в качестве префикса, часть совпадения, затем 9 -N символов в качестве суффикса.

BEGIN {
    FS="|"

    desc["1S"]="file Size differs"
    desc["2M"]="Mode differs (includes permissions and file type)"
    desc["35"]="MD5 sum differs"
    desc["4D"]="Device major/minor number mismatch"
    desc["5L"]="readLink(2) path mismatch"
    desc["6U"]="User ownership differs"
    desc["7G"]="Group ownership differs"
    desc["8T"]="mTime differs"
    desc["9P"]="caPabilities differ"

    ## transform indexes: "4D" -> "...D....."  with "D" in the 4th column
    for (dd in desc) {
         match(dd,/([0-9]+)(.)/,bits)
         regex=sprintf("%.*s%s%.*s",bits[1]-1,".........",bits[2],
                                    9-bits[1],"........")
         sub(/ differs?/,"",desc[dd])
         desc[regex]=desc[dd]; delete desc[dd]
    }
}
{ 
     oo=0; out=""

     for (regex in desc) 
         if ($2 ~ regex) output[++oo]=desc[regex]

     for (ii=1; ii<=oo; ii++) 
         out=sprintf("%s%s%s",out, (ii>1)?", ":"", output[ii]);

     printf("%s|%s differ%sn",$1,out,(oo==1)?"s":"")
}

Такой код достаточно гибок, чтобы обрабатывать многие варианты подобных флагов.

Если вам нужно обработать "?" во входных данных вы также можете изменить код регулярного выражения, чтобы создать более сложное регулярное выражение, например. ".(M|\?)......." вместо просто ".M......."; а затем обработайте это, проверив совпадения в цикле for (regex in desc).


  1. Первая ошибка скрипта, которую я когда-либо исправлял, была в скрипте awk, обрабатывающем лог-файлы. У него был жестко закодированный -массив названий месяцев для поиска или, скорее, массив с отсутствующим названием одного месяца . Вы удивитесь, сколько времени потребуется, чтобы обнаружить это...
0
28.01.2020, 02:54

Теги

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