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!