But this doesn't match the case when the line starts with VAR_NAME
Adicione esse caso em:
egrep -nH '*[^(]VAR_NAME|^VAR_NAME' $i
| corresponde ao padrão à esquerda ou ao padrão à direita. ^ fora de [] corresponde ao início de uma linha.
Observe que há outros casos que isso exclui: (VAR_NAME) sem um $ anterior é um. A resposta do Toto deve corresponder a isso.
Mas, mesmo isso, perderá casos como $(VAR_NAME other stuff , ou seja, sem parênteses de fechamento. Isso pode ser coberto usando grep duas vezes:
grep -nH 'VAR_NAME' $i | grep -v '$(VAR_NAME)'
O primeiro uso do grep obtém todas as linhas que incluem VAR_NAME , o segundo, com o -v flag, filtra a saída do primeiro para remover tudo o que corresponde a $(VAR_NAME) .