Eu provavelmente não entendi sua pergunta, aqui estou supondo que você tenha um arquivo / variável contendo linhas de texto em cada um dos quais você deseja remover todo o texto do símbolo # para o final da linha. / p>
Se esse for o caso, e supondo que você não deseja esse comportamento para ocorrências com escape \# , é assim que eu faria:
sed 's/\([^\]\)#.*$//g' filename
se o texto estiver contido no arquivo filename ou, se estiver contido na variável var ,
sed 's/\([^\]\)#.*$//g' <<< "$variable"
Exemplo
Suponha que o seu arquivo filename contenha o seguinte texto
This is a line#this is a comment
this is another line without comments
this is a line with an escaped sharp symbol \# and therefore this is NOT a comment
então o comando acima gera
This is a line
this is another line without comments
this is a line with an escaped sharp symbol \# and therefore this is NOT a comment
Explicação
sed 's/\([^\]\)#.*$//g'
-
sedé um s tring ed itor:'s/matched-pattern/replaced-pattern/options'.ssignifica s ubstitution e a opçãogpara g lobal, ou seja, não pára após a primeira substituição. -
[^\]math tudo o que é não uma barra invertida\(que precisa ser escapada, daí o dobro\) -
\(pattern\)armazena opatterncorrespondente e é referido comno padrão de substituição -
.*$corresponde a qualquer caractere 'até o final da linha