pcregrep不匹配正则expression式(多行)?

我不明白为什么前两个是一场比赛/命中,但第三个是一个小姐?

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

有一件事,尽pipe这些单词分别位于不同的行上,也许这就是为什么?

*更新*

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

有一件事,尽pipe这些单词分别位于不同的行上,也许这就是为什么?

是。 您必须插入\n并使用-M选项来search跨越行边界的模式:

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

不,他们在彼此分开几行(我没有确切的数量和/或可以改变,所以我需要它的正则expression式)

好。 如果是的话,试试这个:

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