Come "grep" per la lunghezza della linea in un determinato intervallo?


28

NOTA: questa domanda è il complemento di queste domande e risposte: come "grep" per la lunghezza della linea * non * in un determinato intervallo?


Devo ottenere solo le righe da un file di testo (un elenco di parole, separato da una nuova riga) che ha un intervallo di lunghezza minimo o uguale a 3 caratteri, ma non più lungo o uguale a 10.

Esempio:

INGRESSO:

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

PRODUZIONE:

megkíván
alma
kevesen

Domanda: come posso farlo in bash?


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

@Costas geniale, e lo stesso vale anche per sed. Pubblica una risposta completa.
Orione,

Risposte:


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

dove

  • -x abbina il motivo all'intera linea
  • . qualsiasi simbolo
  • {3,10} quantificare da 3 a 10 volte il simbolo precedente (nel caso ce ne fosse uno)

10

usando egrep

egrep '^.{3,10}$'

corrisponde dall'inizio alla fine delle righe per 3 o più caratteri ma inferiore o uguale a 10 caratteri.


1

Utilizzando sed:

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

O:

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

0

Utilizzando awk:

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

L' lengthistruzione restituirà la lunghezza di $0(il record / riga corrente) per impostazione predefinita, e questo viene utilizzato dal codice per verificare se la lunghezza della linea rientra nell'intervallo specificato. Se un test come questo non ha un blocco azione corrispondente, l'azione predefinita è stampare il record.

Test sui dati forniti:

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

Allo stesso modo con Perl:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.