Bash grep循环返回每个文件而不是每个搜索项的输出
我有一个包含多个文件的目录。我想在所有这些文件中搜索相同的关键字,并告诉我每个关键字是否存在于目录中的每个文件中 我已经将关键字放入一个数组中,这使得脚本至少可以一直运行到最后的echo命令(见下文)。但我认为它没有按照我希望的方式循环grep命令Bash grep循环返回每个文件而不是每个搜索项的输出,bash,loops,grep,Bash,Loops,Grep,我有一个包含多个文件的目录。我想在所有这些文件中搜索相同的关键字,并告诉我每个关键字是否存在于目录中的每个文件中 我已经将关键字放入一个数组中,这使得脚本至少可以一直运行到最后的echo命令(见下文)。但我认为它没有按照我希望的方式循环grep命令 DATA_DIR=/directorypath SEARCH1="sulfonamide" SEARCH2="resistance" declare -a LIST_STRINGS=(${SEARCH1} ${
DATA_DIR=/directorypath
SEARCH1="sulfonamide"
SEARCH2="resistance"
declare -a LIST_STRINGS=(${SEARCH1} ${SEARCH2})
cd ${DATA_DIR}
LIST_FILES=`ls -1 */*.faa`
for file in ${LIST_FILES};do ##loop command for every file in the list
echo "Filename is ${file}"
for item in ${LIST_STRINGS[*]};do ##loop command for every search item in the array list
grep -qi ${item} ${file} ##search current file for current search item. q to return 0 status if a match is found. i to ignore upper/lower case
if [ $? == "0" ];then
echo "${item} found!"
else
echo "${item} not found"
fi
done
done
此时,输出不断地告诉我,它在任何文件中都找不到数组中的任何项。我的输出如下(对目录中的每个文件重复):
但是,我知道这是错误的,因为我手动检查了文件,发现SEARCH2存在,而SEARCH1不存在
那么grep命令是否因为找不到这两个术语而返回非0状态呢?如何让它对字符串数组中的每一项执行更新的grep搜索
我试着改变条款的顺序,只扫描一个文件。结果是一样的-输出告诉我,两个术语都找不到,而实际上它们中有一个是存在的。通过使用grep-F和so grep-F“$(echo${LIST_STRIMGS[@]}xargs printf“%s\n”)“${file}sooo您想要
grep-F,可以避免循环遍历数组的每个元素
Filename is path/file.faa
sulfonamide not found
resistance not found