#regex #perl
#регулярное выражение #perl
Вопрос:
Всякий раз, когда я нахожу слово «.abc.corp:» в строке файла, я хотел бы исключить эти строки:
Пример строки:
kubernte-fileserver-NN.abc.corp:/srv/export/storage/nsp_updates 1231231 123112 123123 89% /devops
может ли кто-нибудь помочь мне найти правильный шаблон регулярных выражений:
я пытаюсь использовать приведенное ниже соответствие шаблону: не могу понять это
/^(.*(?!.abc.corp).*)s (d )s (d )s (d )s (d )%s ([/wd.-] )$/
Меня смущает группа подшаблонов $ 1 с негативным взглядом вокруг!
Комментарии:
1. Почему вы пытаетесь втиснуть все в одно регулярное выражение?
Ответ №1:
«исключить это», я предполагаю, что вы хотите исключить всю строку.
Ваша попытка ничего не исключит, потому что здесь Perl всегда может найти некоторую точку в пути к общему ресурсу, чтобы разделить его, где точка разделения не следует сразу за .abc.corp
, например, если она разделяет ее:
kubernte-fileserver-N
N.abc.corp:/srv/export/storage/nsp_updates
или (как это на самом деле собирается сделать) просто используйте все первым .*
, ничего не оставляя для второго.
Вместо этого я бы сначала попытался сопоставить строку, которой вы пытаетесь избежать, и, не сумев этого сделать, приступил к фактической обработке:
if (/^S .abc.corp:/) {
# SKIP
}
elsif (/^(.*)s (d )s (d )s (d )s (d )%s ([/wd.-] )$/) {
...
}
Помимо того, что это действительно работает, это делает код намного более читаемым.