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


28

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


Eu preciso obter apenas as linhas de um arquivo de texto (uma lista de palavras, separada por uma nova linha) que tenha um intervalo de comprimento mínimo ou igual a 3 caracteres, mas não maior ou igual a 10.

Exemplo:

ENTRADA:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

SAÍDA:

megkíván
alma
kevesen

Pergunta: Como posso fazer isso bash?


9
grep -x '.\{3,10\}'
Costas

@ Costas brilhante, e o mesmo vale para sed também. Poste uma resposta completa.
orion

Respostas:


37
grep -x '.\{3,10\}'

Onde

  • -x corresponder padrão à linha inteira
  • . qualquer símbolo
  • {3,10} quantificar de 3 a 10 vezes o símbolo anterior (no caso, qualquer um)

10

usando egrep

egrep '^.{3,10}$'

corresponde do início ao fim das linhas para 3 ou mais caracteres, mas menor ou igual a 10 caracteres.


1

Usando sed:

sed '/^.\{3,10\}$/!d'

Ou:

sed -r '/^.{3,10}$/!d'

0

Usando awk:

awk 'length >= 3 && length <= 10' file

A lengthinstrução retornaria o comprimento de $0(o registro / linha atual) por padrão, e isso é usado pelo código para testar se o comprimento da linha está dentro do intervalo especificado. Se um teste como este não tiver um bloco de ação correspondente, a ação padrão é imprimir o registro.

Teste nos dados fornecidos:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

Da mesma forma com Perl:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
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.