我如何在文件中搜索多行模式?
我需要找到包含特定字符串模式的所有文件。 想到的第一个解决方案是使用xargs grep管道查找:
find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'
但是如果我需要找到跨越多行的模式,我会陷入困境,因为vanilla grep找不到多行模式。
所以我发现了代表Perl Compatible Regular Expressions GREP的pcregrep 。
例如,你需要找到'_name'变量立即跟着'_description'变量的文件:
find . -iname '*.py' | xargs pcregrep -M '_name.*n.*_description'
提示:您需要在您的模式中包含换行符。 根据您的平台,它可能是' n', r',' r n',...
你为什么不去awk:
awk '/Start pattern/,/End pattern/' filename
这里是使用GNU grep
的例子:
grep -Pzo '_name.*n.*_description'
-z
/ --null-data
将输入和输出数据视为线序列。