Eu sou um novato sed . Gostaria de usar sed para excluir linhas comentadas em um arquivo de texto.
Na minha série de arquivos de texto, as linhas comentadas começam com o símbolo # ou o símbolo @ (ou seja, são arquivos originalmente destinados a plotagem em código%). Suponha que eu tenha o seguinte arquivo de amostra (chamado xmgrace ):
# Comment 1
# Another comment
# Yet another comment
@ More comments
@ Still more comments
data1
data2
data3
Eu gostaria de usar sample.txt para modificar sed , no lugar, para obter o seguinte:
data1
data2
data3
onde há uma linha em branco entre " sample.txt " e " data2 " nas duas versões de data3 .
Com inspiração em esta pergunta sobre estouro de pilha , Eu criei esta série de comandos (consecutivos):
sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
que fornecem este arquivo resultante:
<blank line>
<blank line>
<blank line>
<blank line>
<blank line>
data1
data2
data3
onde sample.txt é apenas uma linha em branco. (Eu tive que escrever dessa maneira para que o Stack Exchange formatasse a saída corretamente.)
O problema acima é que as linhas comentadas são substituídas apenas por linhas em branco, não excluídas completamente.
Outra possibilidade de comandos (consecutivos) é:
sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
sed -i '/^$/d' sample.txt
do qual obtenho a seguinte saída:
data1
data2
data3
O acima, no entanto, também está errado porque a linha em branco entre " <blank line> " e " data2 " não foi preservada (estou incorretamente excluindo todas as linhas em branco, indiscriminadamente). Como faço para excluir as linhas comentadas?
Estou executando o Ubuntu Linux. Obrigado pelo seu tempo!