Excluir linha inteira se depois de “:” menos de 4 caracteres

3

Eu tenho um arquivo com muitas linhas, como:

blue:fish
red:tomato
black:moon

Eu gostaria que a linha inteira fosse excluída se depois de ":", houvesse menos de 4 caracteres.

Obrigado pela sua ajuda!

    
por Thomas Jeff 16.07.2014 / 09:57

5 respostas

4

Você pode usar sed :

sed -r -e '/:.{0,3}$/d' data

-r usa expressões regulares estendidas (por {} ). A expressão sed corresponde a todas as linhas com dois pontos seguidos de zero a três caracteres e depois ao final da linha; d exclui essas linhas. Todo o resto será impresso.

    
por 16.07.2014 / 10:02
2

Este comando AWK divide-se em : e imprime linhas, das quais o segundo campo tem pelo menos 4 caracteres (não menos de 4 caracteres). Suposição: : está sempre presente e não ocorre várias vezes.

awk -F : "length($2) >= 4"

Se ocorrer várias vezes, você poderá usar $NF em vez de $2 para se referir à última coluna.

    
por 16.07.2014 / 10:03
0

Há muitas maneiras de fazer isso.

Aqui está um perl :

$ perl -ne 'print unless /:.{0,3}$/' file
blue:fish
red:tomato
black:moon
    
por 16.07.2014 / 10:05
0

No Bash:

while read; do
  [[ "$REPLY" =~ :.{4,} ]] && printf '%s\n' "$REPLY"
done

Em seguida, redirecione conforme necessário.

    
por 01.09.2017 / 17:26
0

Usando grep :

grep -E ':.{4,}$' file

Usando grep + sponge (de moreutils), para "editar" o arquivo "no lugar":

grep -E ':.{4,}$' file|sponge file
    
por 01.09.2017 / 18:12

Tags