As outras respostas funcionam para o exemplo
(o arquivo é CSV * (valores separados por dois pontos),
A string pesquisada será o primeiro campo,
saída desejada é o segundo campo),
mas nenhuma dessas restrições / condições
é realmente declarado na questão.
E, enquanto a pergunta pede um comando
que exclui as linhas que começam com um comentário,
provavelmente não é isso que o OP realmente quer.
(Que tal uma linha como unwanted line:blah:blah #test ,
que contém test em um comentário ?)
A resposta que o OP quer é
grep '^[^#]*test' /etc/oratab
ou
grep "^[^#]*$DBNAME" /etc/oratab
que procura uma linha onde test aparece,
e todos os caracteres antes dele são algo diferente de # .
Como de costume, você deve sempre citar suas referências de variáveis de shell
(por exemplo, "$DB_NAME" e "$env_var" ) a menos que você tenha um bom motivo para não
e você tem certeza de que sabe o que está fazendo.
E, como Stéphane Chazelas aponta ,
if $DBNAME parece uma expressão regular não trivial
(por exemplo, ele contém . , * ou [ … ] ),
provavelmente haverá resultados indesejados.