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?


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)

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.


1

Verwenden von sed:

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

Oder:

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.