Existem vários problemas:
-
Você confunde
"${keywords[*]}"
com"${keywords[@]}"
. O primeiro expande para um argumento um . -
-q
inibe qualquer saída. -
Se você tiver vários padrões, não poderá transmiti-los como uma lista de argumentos. Você precisa de
-e pattern1 -e pattern2
. Ou você deve passá-los em um arquivo (veja-f
).
Eu acho que awk
faz mais sentido neste caso.
Isso pode ser útil:
awk -v patternfile=pattern \
'BEGINFILE {i=0; while(getline var <patternfile) {pattern[i]=var;i++}; '\
'no_patterns=i; close(patternfile)}; '\
'FNR == 1 {print ""; print "file: " FILENAME;}; '\
'{for (i in pattern) { if($0 ~ pattern[i]) {print pattern[i]; delete pattern[i]};}}' \
file file2