pcregrep não está combinando regex (multiline?)

3

Eu não entendo porque os dois primeiros são um jogo / acerto, mas o terceiro é um erro?

-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# 

uma coisa, embora cada uma dessas palavras esteja localizada em linhas diferentes, talvez seja por isso?

* UPDATE *

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

1 resposta

3

one thing though each of these words are located on different lines, maybe that's why?

Sim. Você precisa inserir uma opção \n e usar -M para pesquisar padrões que ultrapassam limites de linha:

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

no, they're on few lines apart from each other (i don't have exact count and/or it can be changed, so I need regex for it)

OK. Se sim, tente isto:

pcregrep -M -q '.*languager(\n|.)*Preferences.*' input.file; echo $?
    
por 22.02.2013 / 04:07

Tags