use*_*000 6 grep search regular-expression patterns
说,我有一个文件,必须在其中搜索多个正则表达式,并且必须计算每个正则表达式的匹配数。
因此,我无法组合这些模式:
grep -Po '{regex_1}|{regex_2}|...|{regex_n}' file | wc -l
Run Code Online (Sandbox Code Playgroud)
... 因为需要每个正则表达式的出现次数。
我显然可以:
occurences[i]=$(grep -Po "${regex[i]}" file | wc -l)
Run Code Online (Sandbox Code Playgroud)
...但不幸的是,遇到的文件可能非常大(> 1 GB)并且有许多模式(在数千个范围内)需要检查,这使得该过程非常缓慢,因为对同一文件进行多次读取涉及。
有没有办法快速做到这一点?
可能awk是这里最快的 shell 工具。你可以试试:
awk "/$regex1/ { ++r1 }
/$regex2/ { ++r2 }"'
END { print "regex1:",r1 "\nregex2:",r2 }' <infile
Run Code Online (Sandbox Code Playgroud)
当然,如果你需要perl像你的问题一样使用正则表达式,那么真的perl是唯一的答案。但是,awk确实使用扩展表达式(如grep -E)而不是基本表达式。