下面的模式效果很好,我得到了数百个结果。
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 - 逻辑上,除了扩展我的搜索之外它不应做任何事情,并增加我的结果。不要减少它们。这是怎么回事?
答案 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
所以,你的问题出在其他地方。