是否可以使用存储在数组中的关键字执行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
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)
您可以使用一些 bash 扩展魔法来为每个元素添加 -e 前缀,并将数组的每个元素作为单独的模式传递。这可以避免一些优先级问题,在这些问题中,您的模式可能与 | 操作员:
$ grep ${args[@]/#/-e } file_name
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是您的模式中不能有任何空格,因为这会将参数拆分为 grep。你不能在上面的扩展周围加上引号,否则你会得到“-e 模式”作为 grep 的单个参数。