Como "grep" para o comprimento da linha * não * em um determinado intervalo?


17

NOTA: Esta pergunta é o complemento das perguntas e respostas: Como "grep" para o comprimento da linha em um determinado intervalo?


Como podemos grep para linhas com menos de 8 ou mais de 63 caracteres, nenhuma que contenha mais de oito e menos de 63 caracteres?

Assim, algumas contagens de caracteres aceitáveis ​​podem ser ...

7 6 5 4 3 2 1 0

...e...

64 65 66 67 ...

3
Sei que você solicita grep, mas pode considerar awk, especialmente se precisar de mais processamento, etc (muito flexível e legível ): # awk '( length($0)<8 ) || ( length($0)>63 )' ação padrão de uma condição é imprimir as linhas correspondentes à condição. Ou, com menos processamento em US $ 0:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Olivier Dulac

@ mikeserv - sim, ao olhar para isso de novo, provavelmente faz mais sentido aproximar-se dessa pergunta e da pergunta como a dup.
slm

@ MikeServ - é geralmente uma dor, eu tenho que mesclar as respostas em um dos Q e eles são excluídos do original. Esta é a orientação para fazê-lo: "As perguntas devem ser mescladas quando são 99% idênticas e seria benéfico ter todas as respostas de várias perguntas duplicadas em um só lugar. Isso exclui respostas, as move para a pergunta de destino e deixa a pergunta atual como um esboço com um link para seu destino de mesclagem ".
slm

o que aconteceu com o meu comentário?
Dmitry Grigoryev

@DmitryGrigoryev - acho que alguém não gostou. leve de quem já esteve lá - esqueça.
mikeserv

Respostas:


38
grep -xv '.\{8,63\}' <input >output

grepO -xinterruptor de denota uma correspondência de linha inteira - ou seja, qualquer padrão encontrado deve definir uma linha da cabeça à cauda. fazendo ...

grep -x pattern

... é geralmente equivalente a ...

grep ^pattern$

grepA -vopção de nega a influência de um padrão na seleção de linha. geralmente fazendo ...

grep pattern

... seleciona apenas as linhas que correspondem ao padrão, mas com um -vpadrão negado, apenas as linhas que não correspondem são selecionadas.

...e entao...

grep -xv '.\{8,63\}'

... corresponde a todas as linhas que consistem da cabeça à cauda de qualquer lugar entre 8 e 63 caracteres, e a -vseleção negada faz com que grepapenas imprima todo o resto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.