Если вы имеете в виду вложенные скобки в (\(.*\))
. Внешняя пара буквальная, а внутренняя, экранированная пара захватывает строку, совпадающую с вложенным регулярным выражением. Обратная ссылка \1
выводит эту захваченную строку. Обратная ссылка \2
выводит строку, захваченную второй парой экранированных скобок.
Если вы имеете в виду фигурные скобки, они окружают блоки команд. Внешняя группа говорит, что если строка соответствует ^Host.*latency.*
, то выполните вложенную команду. Команда $!N
добавляет следующую строку файла, если текущая строка не последняя. Если комбинация строк соответствует MAC Address
, то выполняется блок внутри следующей пары фигурных скобок (выполняется подстановка).
Вы можете прочитать это так:
/^Host.*latency.*/{
- Если строка соответствует этому регулярному выражению, то
$!N
- добавить следующую строку, если текущая строка не является последней строкой
/MAC Address/{
- Если объединенные строки соответствуют этому регулярному выражению, то
s/.*(\(.*\)) .*MAC Address: \(.*\) .*/\1 -> \2/
- сделать эту замену
}
- Конец, если
}
- Конец, если
/[Nn]map/d
- Если пространство шаблона (комбинированные линии) соответствует этому, то удалите его
s/^Host .*is up/& but MAC Address cannot be found/
- сделать эту замену