Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash grep循环返回每个文件而不是每个搜索项的输出_Bash_Loops_Grep - Fatal编程技术网

Bash grep循环返回每个文件而不是每个搜索项的输出

Bash grep循环返回每个文件而不是每个搜索项的输出,bash,loops,grep,Bash,Loops,Grep,我有一个包含多个文件的目录。我想在所有这些文件中搜索相同的关键字,并告诉我每个关键字是否存在于目录中的每个文件中 我已经将关键字放入一个数组中,这使得脚本至少可以一直运行到最后的echo命令(见下文)。但我认为它没有按照我希望的方式循环grep命令 DATA_DIR=/directorypath SEARCH1="sulfonamide" SEARCH2="resistance" declare -a LIST_STRINGS=(${SEARCH1} ${

我有一个包含多个文件的目录。我想在所有这些文件中搜索相同的关键字,并告诉我每个关键字是否存在于目录中的每个文件中

我已经将关键字放入一个数组中,这使得脚本至少可以一直运行到最后的echo命令(见下文)。但我认为它没有按照我希望的方式循环grep命令

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