![pcregrep 与正则表达式不匹配(多行?)](https://linux22.com/image/606704/pcregrep%20%E4%B8%8E%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%8D%E5%8C%B9%E9%85%8D%EF%BC%88%E5%A4%9A%E8%A1%8C%EF%BC%9F%EF%BC%89.png)
我不明白为什么前两次是匹配/命中,而第三次却失败了?
-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 $?