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
egrep
ougrep -E
- O
--
impedirá quegrep
analise as opções na variável$line
, por exemplo ele protegeria você contra um arquivo chamado "-r funnyname.js
"