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'
.s
significa s ubstitution e a opçãog
para 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 opattern
correspondente e é referido comno padrão de substituição
-
.*$
corresponde a qualquer caractere 'até o final da linha