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.