регулярное выражение не дает желаемого соответствия - PullRequest
0 голосов
/ 05 февраля 2020

Ниже приведен мой пример файла данных.

$ cat test.conf
Options -Indexes -FollowSymLinks -Includes -ExecCGI
#Options -Indexes -FollowSymLinks -Includes -ExecCGI
<Directory "/web/htdocs">
    Options -Indexes -FollowSymLinks -Includes -ExecCGI
<Directory "/web/htdocs"> Options -Indexes -FollowSymLinks -Includes -ExecCGI
    RewriteOptions -tester
    Options      -Indexes -FollowSymLinks -Includes -ExecCGI

I wi sh, чтобы получить все записи (только одиночные строки), используя регулярное выражение, которое

начинается со строки "Options", за которым следует строка из этих строк "Indexes" "FollowSymLinks" "Includes" "ExecCGI"

Я попробовал приведенное ниже регулярное выражение, но проблема в том, что он выдает результат "#Options -Indexes -FollowSymLinks -Includes -ExecCGI", где строка начинается с ha sh '#' как а также строка "<Directory "/web/htdocs"> Options -Indexes -FollowSymLinks -Includes -ExecCGI", которая не начинается с опций в новой строке.

Токовый выход:

$ grep -E '^[^\n|#]*[^!Rewrite]Options.*|Indexes|FollowSymLinks|Includes|ExecCGI$' test.conf
Options -Indexes -FollowSymLinks -Includes -ExecCGI
#Options -Indexes -FollowSymLinks -Includes -ExecCGI
    Options -Indexes -FollowSymLinks -Includes -ExecCGI
<Directory "/web/htdocs"> Options -Indexes -FollowSymLinks -Includes -ExecCGI
    Options      -Indexes -FollowSymLinks -Includes -ExecCGI

Желаемый выход:

Options -Indexes -FollowSymLinks -Includes -ExecCGI
    Options -Indexes -FollowSymLinks -Includes -ExecCGI
    Options -Indexes -FollowSymLinks -Includes -ExecCGI

I ' я не ищу grep -v как решение, а вместо этого отрицание регулярного выражения.

Можете ли вы предложить регулярное выражение для удовлетворения моего требования?

1 Ответ

1 голос
/ 05 февраля 2020

Одним из вариантов использования grep может быть использование группы с чередованием | и совпадением с нулем или несколькими пробелами или табуляциями в начале [[:blank:]]*

$grep -E '^[[:blank:]]*Options[[:blank:]]+-(Indexes|FollowSymLinks|Includes|ExecCGI)\b' test.conf

Вывод

Options -Indexes -FollowSymLinks -Includes -ExecCGI
    Options -Indexes -FollowSymLinks -Includes -ExecCGI
    Options      -Indexes -FollowSymLinks -Includes -ExecCGI

Используя Python, вы можете использовать

^[^\S\r\n]*Options[^\S\r\n]+-(?:Indexes|FollowSymLinks|Includes|ExecCGI)\b.*$
  • ^ Начало строки
  • [^\S\r\n]* Соответствие 0+ раз a символ пробела, за исключением новой строки
  • Options[^\S\r\n]+ Match Options`, за которым следует сопоставление 1+ раз символа пробела, кроме символа новой строки
  • - Совпадение буквально
  • (?: без захвата группа
    • Indexes|FollowSymLinks|Includes|ExecCGI Совпадение 1 из вариантов
  • )\b Закрыть группу и использовать границу слова, чтобы слова не входили в большее слово
  • .* Соответствует 0+ раз любому символу, кроме новой строки
  • $ Подтвердить конец строки

Regex demo `

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...