1

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

#!/usr/local/bin/bash

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

我收到错误消息:

xargs: a single arg was greater than the max arglist size of 2048 characters

因此,我将长列表更改为 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

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

4

2 回答 2

6

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

grep -n -f patternFile -R --include=*.xml .
于 2013-06-24T09:46:45.150 回答
1

grep --帮助:

f, --file=FILE 从 FILE 中获取 PATTERN

这样你就可以:

echo "HERE IS LONG LIST(word1|word2|...)" > pattern.txt
find . -name '*.xml' |xargs egrep -n  -f pattern.txt > result
于 2013-06-24T09:47:25.030 回答