Grep mit Position

Hallo,

wie kann ich eine Datei zeilenweise nach einer Zeichenfolge durchsuchen (wie grep), dabei aber die Position der Zeichenfolge mit berücksichtigen?

Es handelt sich hier um Dateien der Größenordnung 2000 - 8000 Zeilen, von diejenigen ausgegeben/in eine neue Datei geschrieben werden sollen, bei denen die Zeichenfolge von x bis y einen bestimmten Wert hat.

Z.B., wenn mein Suchtext „test“, die Position 8 ist und die Eingabe

12345678testeeirweri
wertestwerer66
abcdefghtest
test
a

dann sollen die erste und die dritte Zeile ausgegeben werden.

egrep ‚^(.){8}test‘

liefert mir fast das gewünschte Ergebnis; leider wird auch die zweite Zeile mit ausgegeben (obwohl hier nur drei Zeichen vor „test“ sind; es aber genau 8 sein müssen).

Das ganze muss unter UNIX realisiert werden (nicht mittels Perl!)
Das System ist:
HP-UX Release 11.0 (October 1997)

Ich kenn mich da noch nicht soooo gut aus (soll heißen, beschäftige mich seit drei Tagen mit UNIX)…
Deswegen bitte genaue Erklärungen und nicht zu viel „Fach-Kauderwelsch“ :wink:

Grüße,
Nina

Hallo,

wie kann ich eine Datei zeilenweise nach einer Zeichenfolge
durchsuchen (wie grep), dabei aber die Position der
Zeichenfolge mit berücksichtigen?

Z.B., wenn mein Suchtext „test“, die Position 8 ist und die
Eingabe

12345678testeeirweri
wertestwerer66
abcdefghtest
test
a

dann sollen die erste und die dritte Zeile ausgegeben werden.

Für sowas gibt es doch des Teufels kleinen Helfer sed!
(Eigentlich bei jeder Unix-Variante dabei)
Die Lösung könnte so aussehen:

sed -ne '/^.\{8\}test.\*/p' 

In der Reihenfolge übersetzt heißt es ungefähr soviel viel wie gibt nichts (n) aus, wenn aber am Anfang der Zeile (^) 8 beliebige Zeichen und anschließend test steht, dann gib sie aus §.

Dazu könnte man viel erklären, aber sed und reguläre Ausdrücke kann man ein Leben lang studieren.
Deshalb nur ein paar Links, falls Du interessiert bist:
Ein sed Tutorial von IBM-Developerworks:
http://www-106.ibm.com/developerworks/library/l-sed1…
http://www-106.ibm.com/developerworks/library/l-sed2…
http://www-106.ibm.com/developerworks/library/l-sed3…
Oneliners
http://www.student.northpark.edu/pemente/sed/sed1lin…

Gruß,
Andreas

Hallo Andreas,

Für sowas gibt es doch des Teufels kleinen Helfer sed!

… welcher mir noch nicht bekannt war…

Die Lösung könnte so aussehen:

sed -ne ‚/^.{8}test.*/p‘

Ja, funktioniert!

In der Reihenfolge übersetzt heißt es ungefähr soviel viel wie
gibt nichts (n) aus, wenn aber am Anfang der Zeile (^) 8
beliebige Zeichen und anschließend test steht, dann gib sie
aus §.

Und danke für die Erklärung,

Dazu könnte man viel erklären, aber sed und reguläre Ausdrücke
kann man ein Leben lang studieren.
Deshalb nur ein paar Links, falls Du interessiert bist:

ich werde mir auch das mal durchlesen!

Gruß,
Nina

Oneliners
http://www.student.northpark.edu/pemente/sed/sed1lin…

Hi Andreas,

tausend Sterne für die 1-Liners - die sind echt Klasse, und man kann schon mal eine Bahnfahrt drüber nachgrübeln, warum sie funktionieren… Hast du noch mehr davon (vi, awk, perl, …)?

Gruß
benhard

Hallo,

Oneliners
http://www.student.northpark.edu/pemente/sed/sed1lin…

tausend Sterne für die 1-Liners - die sind echt Klasse, und
man kann schon mal eine Bahnfahrt drüber nachgrübeln, warum
sie funktionieren… Hast du noch mehr davon (vi, awk, perl,
…)?

Leider nicht. Aber wenn Du googlest, kriegst Du zig Treffer.
Da sind zwar nicht alle gut, aber meistens ganz nett.

Gruß,
Andreas