Назад | Перейти на главную страницу

pcregrep не соответствует регулярному выражению (многострочный?)

Я не понимаю, почему первые два - совпадение / попадание, а третье - промах?

-bash-3.2# cat 1361492805.M171838P41834.mx1.alexus.biz\,S\=12921\:2\,Sijm | pcregrep -q '.*languager.*' ; echo $?
0
-bash-3.2# cat 1361492805.M171838P41834.mx1.alexus.biz\,S\=12921\:2\,Sijm | pcregrep -q '.*Preferences.*' ; echo $?
0
-bash-3.2# cat 1361492805.M171838P41834.mx1.alexus.biz\,S\=12921\:2\,Sijm | pcregrep '.*languager.*Preferences.*' ; echo $?
1
-bash-3.2# cat 1361492805.M171838P41834.mx1.alexus.biz\,S\=12921\:2\,Sijm | grep -no 'language'
70:language
-bash-3.2# cat 1361492805.M171838P41834.mx1.alexus.biz\,S\=12921\:2\,Sijm | grep -no 'Preferences'
149:Preferences
-bash-3.2# 

одно хоть каждое из этих слов расположено на разных строчках, может поэтому?

* ОБНОВИТЬ *

-bash-3.2# pcregrep -M -q '.*languager.*\n.*Preferences.*' 1361492805.M171838P41834.mx1.alexus.biz\,S\=12921\:2\,Sijm ; echo $?
1
-bash-3.2#

одно хоть каждое из этих слов расположено на разных строчках, может поэтому?

Да. Вы должны вставить \n и использовать -M возможность поиска шаблонов, охватывающих границы линий:

pcregrep -M -q '.*languager.*\n.*Preferences.*' input.file; echo $?

нет, они находятся на нескольких строках друг от друга (у меня нет точного подсчета и / или его можно изменить, поэтому для него мне нужно регулярное выражение)

ХОРОШО. Если да, попробуйте следующее:

pcregrep -M -q '.*languager(\n|.)*Preferences.*' input.file; echo $?