是否可以使用存储在数组中的关键字执行grep?

Kir*_*ran 8 bash shell grep

是否可以使用存储在数组中的关键字执行grep.

这是可能的代码段...请更正它

args=("key1" "key2" "key3")

cat file_name |while read line
 echo $line | grep -q -w ${args[c]}
done
Run Code Online (Sandbox Code Playgroud)

目前,我只能搜索一个关键字.我想搜索存储在args数组中的所有关键字.

任何建议都将受到高度赞赏.

谢谢,Kiran

gho*_*g74 9

args=("key1" "key2" "key3")
pat=$(echo ${args[@]}|tr " " "|")
grep -Eow "$pat" file
Run Code Online (Sandbox Code Playgroud)

或者用shell

args=("key1" "key2" "key3")
while read -r line
do
    for i in ${args[@]}
    do
        case "$line" in
            *"$i"*) echo "found: $line";;
        esac
    done
done <"file"
Run Code Online (Sandbox Code Playgroud)


cam*_*amh 6

您可以使用一些 bash 扩展魔法来为每个元素添加 -e 前缀,并将数组的每个元素作为单独的模式传递。这可以避免一些优先级问题,在这些问题中,您的模式可能与 | 操作员:

$ grep ${args[@]/#/-e } file_name
Run Code Online (Sandbox Code Playgroud)

这样做的缺点是您的模式中不能有任何空格,因为这会将参数拆分为 grep。你不能在上面的扩展周围加上引号,否则你会得到“-e 模式”作为 grep 的单个参数。