grep и реги

bsv

Guest
grep и реги

Господа юниксоиды, просветите плиз.
Пытаясь перенести на винду скрипт, заточенный под уникс, столкнулся с проблемой.
Для поиска в файле, вызывается grep. Нашел порт под винду с "родных" исходников. Рабочий и вроде полнофункциональный. Но. Если простое
grep.exe -E -h -i "word" somefile.txt
выдает строки с искомым словом, то для поиска только целого слова в начале строки, скриптом предполагалось использовать
grep.exe -E -h -i "^ghost([^a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя]|$)" somefile.txt
Результат - пусто. Может рег кривой? В каком "стандарте" вообще гери у grep?
 

Altex

Новичок
проверь кодировку, если ты эту строчку пытаешься запустить из консоли а файл сделал в блокноте (например)
 

bsv

Guest
Для надежности проверки искомое слово полностью английское. Кодировка соответствует кодировке файла.
Когда кодировка не соответствует, такой эффект, как и когда она вообще не указана. То есть находятся вcе строки, содержащие слово.
 

bsv

Guest
Сори, еще не понял в чем грабля, но на чистом английском тексте все работает. Видать чтото не стыкуется с кирилицей в самой проге. :(
Вопрос закрыт.
Ну, разве что кто посоветует замену.
 

fixxxer

К.О.
Партнер клуба
Сохрани файл в нужной (cp1251) кодировке. :)

Да, могут быть проблемы с регистронезависимым поиском - win32 консольный grep, возможно, использует 866 CP...

Вообще, запускать внешнюю прогу для грепа в корне неверно - grep прекрасно реализуется с помощью PHP функций [m]pcre[/m].
 

bsv

Guest
win32 консольный grep, возможно, использует 866 CP
мне кажется, рег должен поддерживать всю расширенную часть кодовой страницы, а не конкретную версию кирилицы. Кодировка маски и текста совпадает. Возможно, всетаки этот порт не может нормально работать с расширенной частью кодовой страницы. (его ж англоязычные делали, мало ли.)
Ладно, попробую действительно переписать на пхп.

grep прекрасно реализуется с помощью PHP функций pcre.
Сенкс, попробую.
 

bsv

Guest
с регистронезависимым поиском
А, понял. То есть при ключе -i с паттерном какая то фигня происходит, потому как он в кои. Да, похоже на то. Вот блин, проморгал. :(
 
Сверху