Мне нужно использовать Perl-совместимое регулярное выражение для сопоставления нескольких строк, которые появляются в нескольких строках в файле.
Совпадения должны появляться в любом порядке (сервер servernameA.company.com, за которым следует servernameZ.company.com, затем servernameD.company.com или любая комбинация из трех). Примечание. Все совпадения будут отображаться в начале каждой строки.
В моем тестировании с grep -P
я даже не смог найти совпадение для простых строковых терминов, которые появляются в любом порядке на новых строках (даже при использовании модификаторов /s
и /m
). Из прочитанного я почти уверен, что мне нужно предварительное утверждение, но образцы, которые я использовал, не дали мне совпадения даже после анализа каждого бита регулярного выражения, чтобы убедиться, что он соответствует моему сценарию.
Поскольку мне нужно поддерживать это в продакшене, мне нужен простой и относительно понятный ответ.
Пример ввода
irrelevant_directive = 0
# Comment
server servernameA.company.com iburst
additional_directive = yes
server servernameZ.company.com iburst
server servernameD.company.com iburst
# Additional Comment
final_directive = true
Ожидание
Регулярное выражение должно соответствовать и возвращать 3 строки, начинающиеся с сервера (которые появляются в любом порядке), если и только если есть идеальное совпадение для строк «serverA.company.com», «serverZ.company.com» и «serverD». company.com», за которым следует iburst. Все 3 строки должны быть включены.
Наконец, если ответ (или очень похожая форма ответа) может адресовать проверку строк в любом порядке в одной строке, это было бы очень полезно. Например, если у меня есть однострочная строка: preauth param audit=true silent deny=5 severe=false unlock_time=1000 time=20ms
, и я хочу, чтобы термины deny=5
и time=20ms
отображались в любом порядке и, если так, совпадают.
Спасибо заранее за помощь.
grep -P
. Пожалуйста, обновите, так как я добавил новый короткий раздел об ожидаемом выводе регулярного выражения, который я ранее пропустил. - person Kurt W   schedule 04.11.2016