Seu problema é a opção -f . Em vez de especificar o arquivo a ser pesquisado, -f especifica um arquivo para ler uma lista de padrões. A página do manual do OS X grep explica isso, embora não seja muito claro :
-f file, --file=file
Read one or more newline separated patterns from file. Empty pattern lines match every input
line. Newlines are not considered part of a pattern. If file is empty, nothing is matched.
A ajuda para o GNU grep é realmente mais direta:
$ grep --help | grep -- '-f,'
-f, --file=FILE obtain PATTERN from FILE
$
Esse comportamento de -f é, de acordo com a página man do GNU grep, specified by POSIX.
Sua correção provavelmente mudará sua linha:
grep -f $line $regex
para:
egrep "$regex" -- "$line"
- Você está usando uma expressão regular estendida, então use
egrepougrep -E - O
--impedirá quegrepanalise as opções na variável$line, por exemplo ele protegeria você contra um arquivo chamado "-r funnyname.js"