2012-10-10 5 views
6

Ich möchte eine Liste von Zeilen in einer Stapeldatei erhalten, die länger als 120 Zeichen sind. Dafür dachte ich an sed. Ich habe es versucht, aber ich war nicht erfolgreich. Wie kann ich das erreichen? Gibt es eine andere Möglichkeit, eine andere Liste als sed zu bekommen ?? Dank ..Suchen von Zeilen, die länger als 120 Zeichen sind, mit sed

Antwort

11

Ein anderer Weg, dies mit awk zu tun:

cat file | awk 'length($0) > 120' 
+0

Danke. Es funktionierte. Wie kann ich die Zeilennummer bekommen? – Sravan

+0

Irgendein Grund, 'Katze' zu ​​benutzen? – choroba

+1

awk 'Länge ($ 0)> 120 {Druck NR ":" $ 0}' – piokuc

7

Sie grep und quantifier seine Wiederholung verwenden:

grep '.\{120\}' script.sh 
+0

+1. Bläh, ein paar Sekunden schneller. –

+0

'Grep' ist mindestens 10x schneller bei großen Dateien (10 GB). – FeedTheWeb

5

Mit sed, haben Sie einige Alternativen:

sed -e '/.\{120\}/!d' 
sed -e '/^.\{,119\}$/d' 
sed -ne '/.\{120\}/p' 

Die erste Option entspricht Zeilen, die (mindestens) 1 nicht haben 20 Zeichen (die ! nach dem Ausdruck soll den Befehl auf Zeilen ausführen, die nicht entsprechen das Muster vor ihm), und löscht sie (dh. druckt sie nicht).

Die zweite Option entspricht Zeilen, die vom Anfang (^) bis zum Ende ($) insgesamt Zeichen von Null bis 119 enthalten. Diese Zeilen werden ebenfalls gelöscht.

Die dritte Option besteht darin, das -n-Flag zu verwenden, das sed anweist, Zeilen nicht standardmäßig zu drucken und nur etwas zu drucken, wenn wir es ihm mitteilen. In diesem Fall passen wir Zeilen an, die (mindestens) 120 Zeichen enthalten, und verwenden sie , um sie zu drucken.

+0

Die Frage nennt 'sed' spezifisch. Während ich alle anderen Antworten schätze, ist diese die einzige, die funktioniert, wenn sed alles ist, was Sie haben. – Leo

Verwandte Themen