Tenho uma sequência de padrões de pesquisa armazenados em uma matriz bash ( ptrn
), que desejo passar para um grep
comando. Como eu posso fazer isso?
ptrn=("FN" "DS")
for fl in "$@"; do # loop through number of files
if [[ -f "$fl" ]]; then
printf '\n%s%s%s\n\n' "$mgn" "==> $flnm <==" "$rst"
grep --color "$ptrn" "$flnm"
fi
done
Que tal passar os padrões
grep
através de um sub-shell, por exemplo:Se é garantido que seus padrões/palavras armazenados como elementos de array não possuem espaços ou caracteres especiais de shell sem escape, então você pode usar a
bash
expansão de parâmetro para passar os elementos de arraygrep
como padrões individuais separados,-e FN -e DS ...
por exemplo:Ou se eles podem conter caracteres especiais de shell sem escape, você pode construir as expressões regulares em torno de
|
( ou ) ( dividindo em todos os espaços também, mas não falhando ) e usá-lo com algo como:Ou para preservar espaços exatos dentro de cada padrão de expressão regular, passando cada elemento da matriz como um token individual e construindo uma expressão regular estendida deles usando o
|
( lógico ou ), você pode fazer algo assim: