Регулярное выражение, включающее исключение (то есть "не содержит") для grep - PullRequest
3 голосов
/ 26 марта 2010

Я пытаюсь отфильтровать файлы журнала веб-сервера, используя grep. Мне нужно вывести все строки, содержащие 65.55. , но исключить те совпадающие строки, которые содержат msnbot .

Моя отправная точка такова, но она не работает:

grep "^.*65\.55\..*(!msnbot).*$" ex100101.log > results.txt

Я использую grep для Windows (отсюда двойные кавычки), но сомневаюсь, что это важно.

Ответы [ 4 ]

5 голосов
/ 26 марта 2010

Я бы просто сделал это с двумя greps:

grep "65.55" ex100101.log | grep -v msnbot > results.txt
2 голосов
/ 26 марта 2010

обычно вы используете 2 greps. один для поиска нужного шаблона, другой с параметром -v для исключения шаблона. однако вы можете использовать awk, который делает все это в одном процессе.

awk '/.*65\.55.*/ && !/msnbot/' ext100101.log >results.txt

Вы можете скачать awk для Windows здесь .

1 голос
/ 26 марта 2010

Если grep поддерживает прогнозирование, вы можете использовать

grep "^.*65\.55\.(?:.(?!msnbot))*$" ex100101.log > results.txt 
0 голосов
/ 26 марта 2010

Самое простое - передать вывод первой команды и исключить строки, используя grep -v

grep FINDPATTERN | grep -v EXCLUDEPATTERN LOGFILE > results.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...