Сценарий Awk не перехватывает хеш-символ «#»

Сценарии сопровождающего ядра, в частности /etc/kernel/postinst.d/apt-auto-removal, составляют список ядер, которые необходимо сохранить, сохраняя их как конфигурацию APT в /etc/apt/apt.conf.d/01autoremove-kernels. Этот процесс сохраняет текущее запущенное ядро, конфигурируемое ядро ​​и два последних установленных ядра.

Предположительно, в последний раз, когда скрипт запускался перед вашей первой очисткой -, -96оказался защищенным, поскольку попал в одну из этих категорий. После вашей первой очистки -он перестал работать и стал кандидатом на удаление. Если вы хотите выяснить , почему , файл 01autoremove-kernelsсодержит отладочную информацию; глядя на него до первой очистки -и снова после, вы должны понять, почему различные версии ядра защищены.

Автоматическое удаление ядра -является преднамеренно консервативным и ошибочным в сторону осторожности. Вы можете справиться с этим автоматически (в конце концов )используя unattended-upgrades; подробности см. на вики Ubuntu .

1
11.09.2020, 01:20
2 ответа

regex=/^[a-zA-Z]+\S+/означает «сравнить $0с /^[a-zA-Z]+\S+/и сохранить результат в переменной regex», поэтому regexбудет 1 или 0 в результате этого присваивания, и поскольку мы находимся в разделе BEGINгде строки не были прочитаны и поэтому $0 все еще пуст, это эквивалентно regex=0.

\Sявляется расширением GNU awk, что означает [^[:space:]], поэтому, если вы использовали GNU awk -, оно также поддерживает строго типизированные константы регулярных выражений (, см.https://www.gnu.org/software/gawk/manual/gawk.html#Strong-Regexp-Constants). Имея это в виду, вы можете (отметить символ @):

$ seq 5 | awk 'BEGIN{re=@/3/} $0 ~ re'
3

но только в GNU awk.

В любом другом варианте awk (, в котором вы говорите, что используете версию 20070501Я подозреваю, что вы используете вариант BSD )лучшее, что вы можете сделать, это использовать динамическое регулярное выражение:

$ seq 5 | awk 'BEGIN{re="3"} $0 ~ re'
3
2
18.03.2021, 23:05

Это не шаблон awk (похоже на perl):

regex=/^[a-zA-Z]+\S+/ 

что-то вроде этого подойдет:

regex="^[a-zA-Z]+[^[:space:]]+"

Кроме того, ваш шаблон должен соответствовать $0(, а не$1). $0— вся строка. $1- это первое поле (думайте о нем как о первом слове в каждой строке :, которое может не иметь#для сопоставления в первом столбце ).

С этими двумя исправлениями ваш пример мне подходит...

1
18.03.2021, 23:05

Теги

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