RegEx в awk и WinGrep

Итак, я ищу такой шаблон:

размер = '0x0'

В файле журнала, но меня интересуют только большие размеры (4 цифры и более). Следующее регулярное выражение отлично работает в EditPadPro (хороший инструмент, кстати)

size='0x[0-9a-fA-F]{4,}

Но тот же RegEx не работает в awk - похоже повторение {4,} портит дело. То же самое с WinGrep — есть идеи от гуру RegEx? Спасибо!


person Jeff    schedule 06.11.2008    source источник
comment
Если ответ @adamalex сработал, вы должны пометить его как правильный как для его пользы, так и для следующего человека, которому нужен ответ на этот вопрос.   -  person Ben Doom    schedule 07.11.2008
comment
Вы можете использовать PowerGREP вместо WinGrep, так что вы будете работать с точно таким же механизмом регулярных выражений, что и в EditPad Pro.   -  person Jan Goyvaerts    schedule 11.11.2008


Ответы (3)


На самом деле вы можете использовать awk, но с оговоркой.

Как упоминалось на следующей странице, вам понадобится специальный параметр командной строки (--re-interval), чтобы заставить его работать, поскольку выражение интервала ({4,}) не входит в стандарт:

http://kansai.anesth.or.jp/gijutu/awk/gawk/gawk_28.html

Итак, в конце концов, вам нужно что-то вроде:

awk --re-interval "/size='0x[0-9a-fA-F]{4,}'/" thefile

Это распечатает совпадающие строки.

person Dan Fego    schedule 06.11.2008
comment
Это не «ах»; это GNU 'gawk', и это не единственная версия. Сказав это, в Windows «awk», скорее всего, от GNU, тем более, что это был принятый ответ, но это не было автоматически (я полагаю, что у MKS есть версия awk). - person Jonathan Leffler; 07.11.2008
comment
Учитывая вездесущность утилит GNU, я подумал, что это, по крайней мере, хорошее место для начала. И поскольку это сработало, похоже, мое предположение было верным. ;-) - person Dan Fego; 07.11.2008

Я не знаю никаких элегантных альтернатив синтаксису {4,}, но если он не работает в нужной вам среде, вы можете прибегнуть к этому уродливому хаку:

size='0x[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]+

Надеюсь это поможет!

Адам

person Adam Alexander    schedule 06.11.2008
comment
хорошо - уродливый хак сработал отлично, и это главное, верно? Для меня было приятно изучить новый инструмент, а не писать еще одно приложение на C! - person Jeff; 06.11.2008

Не забудьте последний апостроф.

'
person Keng    schedule 06.11.2008