添加OR时正则表达式模式失败?

时间:2013-11-25 20:33:55

标签: regex bash shell unix

下面的模式效果很好,我得到了数百个结果。

xargs pcregrep -M "select.*table(.)*" >> $grep_out

返回(样本):

./mo/module1/module1.4gl: call error("Prepare select_table failed.")
./mo/module1/module1.4gl: declare select_table cursor with hold for sel_table
./mo/module1/module1.4gl: let prep = " select * from table ",

当我向最终结尾字符添加OR时,我得到0结果:

xargs pcregrep -M "select.*table(.|\n)*" >> $grep_out

这对我来说毫无意义。我正在添加OR - 逻辑上,除了扩展我的搜索之外它不应做任何事情,并增加我的结果。不要减少它们。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

由于您使用的是多行,因此您将匹配文件中的第一个select table,然后由于(.\n)*,您将匹配文件的其余部分。请注意只有一个匹配:

$ pcregrep -M "select.*table(.|\n)*" *
file.txt:call error("Prepare select_table failed.")
declare select_table cursor with hold for sel_table
let prep = " select * from table ",

OR组件没有问题。

$ pcregrep -M "FOO(\n)" *
file.txt:FOO
file.txt:FOO

$ pcregrep -M "FOO(.)" *
file.txt:FOOF

$ pcregrep -M "FOO(.|\n)" *
file.txt:FOO
file.txt:FOOF
file.txt:FOO

所以,你的问题出在其他地方。