Wie kann ich die Zeilenlänge in einem bestimmten Bereich ermitteln?

28

HINWEIS: Diese Frage ist die Ergänzung zu dieser Frage und Antwort: Wie kann man die Zeilenlänge * nicht * in einem bestimmten Bereich "abfragen"?


Ich brauche nur die Zeilen aus einer Textdatei (eine Wortliste, die durch Zeilenvorschub getrennt ist) mit einem Längenbereich von mindestens 3 Zeichen, jedoch nicht mehr als 10 Zeichen.

Beispiel:

EINGANG:

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

AUSGABE:

megkíván
alma
kevesen

Frage: Wie kann ich das in machen bash?

agc
quelle
9
grep -x '.\{3,10\}'
Costas
@Costas genial, und das gilt auch für sed. Schreibe eine vollständige Antwort.
Orion

Antworten:

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

woher

  • -x Muster an ganze Linie anpassen
  • . irgendein Symbol
  • {3,10} Quantifizierung des 3- bis 10-fachen des vorherigen Symbols (falls vorhanden)
Costas
quelle
10

mit egrep

egrep '^.{3,10}$'

Entspricht vom Anfang bis zum Ende von Zeilen für 3 oder mehr Zeichen, jedoch weniger als oder gleich 10 Zeichen.

repzero
quelle
1

Verwenden von sed:

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

Oder:

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

Verwenden von awk:

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

Die lengthAnweisung würde $0standardmäßig die Länge (des aktuellen Datensatzes / der aktuellen Zeile) zurückgeben, und diese wird vom Code verwendet, um zu testen, ob die Länge der Zeile innerhalb des angegebenen Bereichs liegt. Wenn für einen solchen Test kein entsprechender Aktionsblock vorhanden ist, wird standardmäßig der Datensatz gedruckt.

Prüfung auf die angegebenen Daten:

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

Ähnliches gilt für Perl:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
Kusalananda
quelle