Removendo todas as linhas que não são uma sequência de 7 números

2

Eu tenho um arquivo de texto como este:

229;39;45;11;21;33;13
230;56;44;41;40;08;53
231;16;59;27;42;44;36
232;29;19;41;22;37;59
233;45;03;24;36;07;32
SP;SP;SP;;;;
234;15;45;54;25;42;41
235;29;41;55;02;31;22
236;10;52;50;57;25;60
237;36;07;45;31;56;57
238;15;09;41;13;37;42
SP;SP;;;;;
239;33;21;44;46;47;06
240;59;28;25;41;57;38
241;11;57;40;35;56;31
242;22;07;04;21;28;56
243;20;47;23;32;16;11
244;19;60;50;24;47;33
245;44;51;27;53;08;60
MG;;;;;;

As linhas corretas são uma sequência de sete números separados por ponto e vírgula. Em posições aleatórias, há linhas que são lixo, como MG;;;;;; ou SP;SP;;;;;

Qual comando devo digitar no terminal para remover essas linhas erradas do arquivo que contém milhares de linhas, mantendo apenas as linhas que são sequências de sete números?

    
por SpaceDog 11.06.2015 / 03:16

4 respostas

4
grep -Ex '[0-9]+(;[0-9]+){6}'

... produz a seguinte saída, dados seus dados de entrada:

229;39;45;11;21;33;13
230;56;44;41;40;08;53
231;16;59;27;42;44;36
232;29;19;41;22;37;59
233;45;03;24;36;07;32
234;15;45;54;25;42;41
235;29;41;55;02;31;22
236;10;52;50;57;25;60
237;36;07;45;31;56;57
238;15;09;41;13;37;42
239;33;21;44;46;47;06
240;59;28;25;41;57;38
241;11;57;40;35;56;31
242;22;07;04;21;28;56
243;20;47;23;32;16;11
244;19;60;50;24;47;33
245;44;51;27;53;08;60
    
por 11.06.2015 / 03:21
2

com sed :

sed -n '/^[0-9][0-9]*\(;[0-9][0-9]*\)\{6\}$/p' <infile
    
por 11.06.2015 / 03:25
1

egrep '^[0-9]+;[0-9]+;[0-9]+;[0-9]+;[0-9]+;[0-9]+;[0-9]+$' file > temp && mv temp file

    
por 11.06.2015 / 03:23
1

Estes não são tão robustos quanto alguns dos outros exemplos, mas funcionarão para casos simples:

grep -v ';;'

Ou

grep [[:digit:]]
    
por 11.06.2015 / 06:45