Regex

pcregrep 不匹配正則表達式(多行?)

  • February 22, 2013

我不明白為什麼前兩個是匹配/命中,而第三個是未命中?

-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 $?

引用自:https://serverfault.com/questions/481337