pcregrep 与正则表达式不匹配(多行?)

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#

答案1

但有一点,这些词中的每一个都位于不同的行上,也许这就是原因?

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

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

不,它们彼此相隔几行(我没有确切的数量和/或它可以改变,所以我需要正则表达式)

好的。如果是这样,请尝试以下操作:

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

相关内容