我想搜索数百个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)
有没有更好的方法来处理这个以避免模式列表分离的事情?
更好的方法是将所有匹配模式存储在一个文件中,并使用带有-fswitch的递归grep :
grep -n -f patternFile -R --include=*.xml .
Run Code Online (Sandbox Code Playgroud)