我正在尝试在任何行上找到3个单词的模式,其中包含任何内容。目前,我正在以这种方式使用pcregrep(-M用于多行):
sep=$( echo ".*\n.*" )
find . -name "$FILE" 2>null | xargs pcregrep -M "string1($sep)string2($sep)string3" >> $grep_out
我得到了这个结果:
./testing/test.txt: let prep = "select string1, dog from cat",
" where string2 = 1",
" and string3 = ?",
哪个好。但是,我希望这种模式能够在几个换行符中找到这3个字符串 - 而不仅仅是连续的。例如,我希望找到这个结果:
./testing/test.txt: let prep = "select string1, dog from cat",
" where apple = 1",
" and string2 = 2",
" and grass = 8",
" and string3 = ?",
我的模式现在与上述结果不匹配是有道理的,因为它只是寻找一个换行符。所以,我认为将代码改为这样可以解决这个问题(更改$ sep变量并在搜索模式中添加星号):
sep=$( echo ".|\n" )
find . -name "$FILE" 2>null | xargs pcregrep -M "string1($sep)*string2($sep)*string3" >> $grep_out
但是现在没有结果。将星号放在括号内也不会产生任何结果。所以我仍然在寻找一种模式,它允许在我的3个字符串之间包含0个或更多个字符,包括换行符。
答案 0 :(得分:2)
find . -name "$FILE" 2>/dev/null -execdir \
sh -c "grep -aA999999 string1 '"{}"' | grep -aA999999 string2 | grep -q string3" \
';' -print
仅限于string1,string2和string3之间的999999行。
请勿在{{1}}之后添加空格。