Remover linhas em um script de shell

0

Eu tenho este arquivo:

# more file.txt
 2c2
lns-ld-wall-01-t2 old:261,260
4c4
Prive_ORANGE old:258,259

Eu preciso remover todas as linhas como esta 2c2 e esta 4c4 . Como posso fazer em um script de shell?

    
por toto 04.05.2015 / 11:12

3 respostas

2

Isso deve funcionar:

sed 's/.*[0-9]c[0-9].*//g' file.txt

No entanto, como mencionado no comentário, o comando acima não removerá as linhas completas, portanto, uma maneira melhor seria usar o comando d em linhas correspondentes:

sed '/[0-9]c[0-9]/d' file.txt

Ou com expressões regulares estendidas com o GNU sed ( -E é o sinalizador preferido para compatibilidade com o BSD * sed s):

sed -E '/^[[:blank:]]*[0-9]+[a-z]+[0-9]/d' file
    
por 04.05.2015 / 11:20
0

grep (e egrep ou seu equivalente moderno grep -E ) é seu amigo:

man grep

Veja a opção -v .

Aqui:

grep -Exv '[[:blank:]]*[0-9]+c[0-9]+[[:blank:]]*' file

filtraria as linhas que consistem em c , cercadas por dígitos decimais e espaços em branco opcionais.

    
por 04.05.2015 / 11:22
0

Tome o caminho certo.

Teste com:

perl -ne 's/^\s*[0-9]+c[0-9]+$//g; if ($_ !~ /^$/) {print }' file.txt

Altere o arquivo file.txt com:

perl -ne 's/^\s*[0-9]+c[0-9]+$//g; if ($_ !~ /^$/) {print }' -i file.txt
    
por 04.05.2015 / 14:11