Remova linhas com menos de 4 caracteres e mais de 3 números no bash

3

Por exemplo, eu tenho este arquivo de texto:

use
user_99
12345

+ 10k linhas ...

E eu quero remover aqueles que têm menos de 4 caracteres da linha de comando, Eu já pesquisei no google, mas não houve resultados.

Alguma ideia? :)

Eu também gostaria de remover linhas com mais de 3 números no começo.

    
por user257284 12.03.2014 / 01:04

2 respostas

2

sed ou awk são boas escolhas:

sed -rn '/^.{0,3}$/n; /^[0-9]{3,}/n; p' file

awk --re-interval 'length > 3 && !/^[0-9]{3,}/' file
    
por glenn jackman 12.03.2014 / 02:12
3

Você pode fazer um regex de GNU para pelo menos 4 caracteres como .{4,} - e então deletar todas as linhas exceto aquelas com pelo menos 4 caracteres:

sed -r '/.{4,}/!d' file

Da mesma forma, uma linha que comece com mais de três dígitos consecutivos seria ^[0-9]{4,} , para excluir todos os

sed -r '/^[0-9]{4,}/d' file

Você pode combiná-los usando -e ou ;

sed -r -e '/.{4,}/!d' -e '/^[0-9]{4,}/d' file

ou

sed -r '/.{4,}/!d ; /^[0-9]{4,}/d' file

Observe que . corresponde a caracteres de espaço e a caracteres que não são de espaço - se não for o que você deseja, você poderá alterá-lo substituindo . por um intervalo de caracteres ou POSIX, como [[:alnum:]] . / p>     

por steeldriver 12.03.2014 / 02:12

Tags