Как ядро ​​Linux поддерживает изменения DNS для разрешения доменных имен?

Еще один sedответ здесь, основанный на других ответах, в частности на этом Исаака.

Сопоставление всего от открывающей последовательности до первой закрывающей последовательности (здесь:},new-line)потребует не -жадных совпадений. Как правило, sedне имеет ни их, ни возможности инвертировать многосимвольные -строки в регулярном выражении. Вы можете найти расширенные объяснения по этой теме в U&L, одним из примеров с подробными ответами является этот вопрос .

((Элегантное )лаконичное решение IMMO, разработанное Кусаланандой, преодолевает это ограничение за счет использования диапазонов адресов. Однако здесь я стремлюсь к альтернативе, которая не будет удалять полностью первую и последнюю совпадающие строки ).

Как объясняется в ответе Исаака , вы можете преобразовать закрывающую последовательность в один символ, а затем использовать класс символов, который включает отрицание этого символа, чтобы не -жадно удалять текст до первого (новая )последовательность закрытия.

Если вы также не хотите полагаться на предположение, что этот символ не появится во входном тексте, вы можете использовать экранирование и заменить его какой-либо специальной строкой.
Это один из возможных способов сделать это (выбор «специальных» символов совершенно произвольный ),с учетом ваших требований:

  1. Поместите весь ввод в пространство шаблонов, чтобы позволить sedсовпадать с текстом, занимающим несколько строк
  2. Замените каждый\(наш escape-символ )на \b-, чтобы последовательности символов, подобные \s, были невозможны
  3. Замените каждую#(нашу одиночную -закрывающую последовательность символов )на \s-, чтобы любая #была невозможна
  4. Заменить любое вхождение последовательности },new-lineна#
  5. Удалить любое вхождение :нуля или более пробелов + литерал «абстрактный» + один пробел + один знак равенства + ноль или более символов, за исключением (остановки на первом)#+ одном последнем#
  6. Верните законные },new-lineпоследовательности
  7. Вернуть \sк#
  8. Вернуть \bк\

Соответствующая команда:

sed ' H;1h;$!d;g;
      s/\\/\\b/g;
      s/#/\\s/g;
      s/},\n/#/g;
      s/[[:blank:]]*abstract[[:blank:]]=[^#]*#//g;
      s/#/},\n/g;
      s/\\s/#/g;
      s/\\b/\\/g;'

Один из ответов на вышеупомянутый вопрос дает аналогичный пример с экранированием. Он отличается от этого, главным образом, тем, что не стремится сопоставлять несколько -строк текста.

0
15.03.2020, 19:37
1 ответ

Ядро Linux не заботится о DNS.

Пользовательское пространство заботится о нем и обычно просматривает каждое имя каждый раз, когда оно необходимо, возможно, с некоторым локальным кэшированием.

4
28.04.2021, 23:20

Теги

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