Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Бука Гость
|
Добавлено: Пт Май 07 2004 09:36 Заголовок сообщения: Грепоизвращение |
|
|
Задачка:
имеется логфайл, в нем ессно строки разные
Требуется - парсить данный файл, выдирая из него либо строки со словом "abc" либо со словом "def", полностью игнорируя остальное.
Хочу сделать грепом, теоретически должно работать. Кто-нить делал, получалось?
awk, perl, c++ и так далее в данном случае не рассматриваются... |
|
Вернуться к началу |
|
|
ryabinkin
Зарегистрирован: 01.12.2003 Сообщения: 152 Откуда: Moscow
|
Добавлено: Пт Май 07 2004 22:00 Заголовок сообщения: |
|
|
grep -E '\<(abc|def)\>' имя файла
Работает, если в строке есть _слово_ "abc" или "def", то есть сущность, отделенная от других символов любым разделителем (неалфавитным символом) и не содержащаяя их в себе. _________________ Из двух спорящих виноват тот, кто умнее. |
|
Вернуться к началу |
|
|
Dmitry.Karpov
Зарегистрирован: 30.11.2003 Сообщения: 415 Откуда: Moscow
|
Добавлено: Сб Май 08 2004 09:21 Заголовок сообщения: Re: Грепоизвращение |
|
|
grep '\(abc\|def\)'
Бэкслешами экранируются скобки и пайп для того, чтобы grep (точнее, библиотека рег.выражений) толковала их как спец.символы. Можно и три слова:
grep '\(abc\|def\|ghi\)' _________________ Благословен Бог, сотворивший меня сисадмином! |
|
Вернуться к началу |
|
|
ryabinkin
Зарегистрирован: 01.12.2003 Сообщения: 152 Откуда: Moscow
|
Добавлено: Сб Май 08 2004 13:08 Заголовок сообщения: Дмитрий, позвольте с Вами не согласиться... |
|
|
Приведенное вами регулярное выражение найдет совпадение даже в слове
xxxabcxxx,
что, как я понял из условия задачи, неприемлемо.
2All
Обратите, пожалуйста, внимание на различия в наших с Дмитрием решениях.
Мое решение использует т.н. (в терминологии программы grep) extended regular expression (специальный ключ -E, можно также вызывать командой egrep), а решение Дмитрия - basic regular expression.
Различия в них - форма скобок в конструкции выбора - неэкранированные ")" или экранированные "\)" и сама конструкция выбора - "|" или "\|"
Кроме того, в extended regular expression поддерживаются метасимволы границ слов "\<" и "\>" _________________ Из двух спорящих виноват тот, кто умнее. |
|
Вернуться к началу |
|
|
Dmitry.Karpov
Зарегистрирован: 30.11.2003 Сообщения: 415 Откуда: Moscow
|
Добавлено: Сб Май 08 2004 22:57 Заголовок сообщения: Позволяю :-) |
|
|
ryabinkin писал(а): | Приведенное вами регулярное выражение найдет совпадение даже в слове
xxxabcxxx,
что, как я понял из условия задачи, неприемлемо. |
А вот это вопрос к автору ветки, что он подразумевает под "словом".
ryabinkin писал(а): | 2All
Обратите, пожалуйста, внимание на различия в наших с Дмитрием решениях.
Мое решение использует т.н. (в терминологии программы grep) extended regular expression (специальный ключ -E, можно также вызывать командой egrep), а решение Дмитрия - basic regular expression.
Различия в них - форма скобок в конструкции выбора - неэкранированные ")" или экранированные "\)" и сама конструкция выбора - "|" или "\|"
Кроме того, в extended regular expression поддерживаются метасимволы границ слов "\<" и "\>" |
Конечно, extended regular expression более продвинутое, и в большинстве программ (таких как Squid) используется именно ext.regex. Но и моё решение нормально сработает. Собственно, я написАл его для демонстрации того, что можно искать любое количество слов. _________________ Благословен Бог, сотворивший меня сисадмином! |
|
Вернуться к началу |
|
|
|