Wie kann man die Zeilenlänge in einem bestimmten Bereich "abfragen" * nicht *?

17

ANMERKUNG: Diese Frage ist die Ergänzung zu dieser Frage und Antwort: Wie kann die Zeilenlänge in einem bestimmten Bereich ermittelt werden?


Wie können wir nach Zeilen suchen, die weniger als 8 oder mehr als 63 Zeichen enthalten, keine, die mehr als 8 und weniger als 63 Zeichen enthalten?

Also, einige akzeptable Zeichenanzahl könnte sein ...

7 6 5 4 3 2 1 0

...und...

64 65 66 67 ...
LoukiosValentine79
quelle
3
Ich weiß, dass Sie danach fragen grep, aber Sie können Folgendes in Betracht ziehen awk, insbesondere, wenn Sie weitere Verarbeitung usw. benötigen (sehr flexibel und lesbar ): awk '( length($0)<8 ) || ( length($0)>63 )'#Die Standardaktion einer Bedingung besteht darin, die Zeile (n) zu drucken, die der Bedingung entsprechen. Oder mit weniger Verarbeitung bei 0 $:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Olivier Dulac
@mikeserv - Ja, wenn man sich das noch einmal ansieht, ist es wahrscheinlich sinnvoller, sich diesem Q & A anzunähern.
slm
@mikeserv - es ist im Allgemeinen ein Schmerz, ich muss die Antworten in einer der Fragen zusammenführen und sie werden dann aus dem Original gelöscht. Dies ist die Anleitung dazu: "Fragen sollten zusammengeführt werden, wenn sie zu 99% identisch sind, und es wäre vorteilhaft, wenn alle Antworten von mehreren doppelten Fragen an einem Ort wären. Dadurch werden Antworten gelöscht, zur Zielfrage verschoben und verlassen die aktuelle Frage als Stub mit einem Link zu ihrem Merge-Ziel. "
slm
Was ist mit meinem Kommentar passiert?
Dmitry Grigoryev
@DmitryGrigoryev - schätze, jemand hat es nicht gefallen. nimm es von jemandem, der dort war - vergiss es.
mikeserv

Antworten:

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

grep's -x - Schalter bezeichnet eine ganze Linie Spiel - die , dass jedes Muster abgestimmt zu sagen ist , muß eine Linie vom Kopf bis zum Schwanz definieren. tun...

grep -x pattern

... ist in der Regel gleichbedeutend mit ...

grep ^pattern$

grepMit dem -vSchalter wird der Einfluss eines Musters auf die Zeilenauswahl aufgehoben. im Allgemeinen tun ...

grep pattern

... wählt nur Linien aus, die dem Muster entsprechen, aber mit einem -v negierten Muster werden jedoch nur die Linien ausgewählt, die nicht übereinstimmen.

...und so...

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

... stimmt mit allen Zeilen überein, die von Kopf bis Ende aus 8 bis 63 Zeichen bestehen, und die -vnegierte Auswahl bewirkt, dass grepnur alles andere gedruckt wird.

mikeserv
quelle