在bash脚本中使用带有长模式列表的egrep

poi*_*000 1 bash grep

我想搜索数百个xml文件中是否存在一些关键词,我想使用以下脚本来处理这个问题:

#!/usr/local/bin/bash

find . -name '*.xml' |xargs egrep -n "HERE IS LONG LIST(word1|word2|...)" > result
Run Code Online (Sandbox Code Playgroud)

我得到错误消息为:

xargs: a single arg was greater than the max arglist size of 2048 characters
Run Code Online (Sandbox Code Playgroud)

所以我将长名单改为3个部分,它变为:

#!/usr/local/bin/bash

find . -name '*.xml' |xargs egrep -n "LIST_1" > result
find . -name '*.xml' |xargs egrep -n "LIST_2" >> result
find . -name '*.xml' |xargs egrep -n "LIST_3" >> result
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个以避免模式列表分离的事情?

anu*_*ava 6

更好的方法是将所有匹配模式存储在一个文件中,并使用带有-fswitch的递归grep :

grep -n -f patternFile -R --include=*.xml .
Run Code Online (Sandbox Code Playgroud)