PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Textdatei nach String durchsuche und ganze Zeile ausgeben



die_Eule
06.05.06, 23:22
Hi.

Ich möchte in einem Script eine Textdatei durchsuchen lassen und die Zeile in der der die Zeichenkette steht ausgeben lassen. Bzw sind es eigentlich nur die nächsten paar Buchstaben. Gibt es einen Befehl der das kann in der konsole?

tschloss
06.05.06, 23:23
grep ist dein freund

oder grep | sed

Thomas

die_Eule
06.05.06, 23:26
Und wie genau, wenn ich fragen darf?
Ich schaffe es nur den String an sich auszugeben. Aber den gebe ich ja auch ein, also bringt es mir nichts.

Glorks
07.05.06, 02:19
Und wie genau, wenn ich fragen darf?
Ich schaffe es nur den String an sich auszugeben. Aber den gebe ich ja auch ein, also bringt es mir nichts.



cat /pfad/txt | grep zeichenkette
oder direkt die textdatei an grep übergeben, man grep

tschloss
07.05.06, 09:12
Genau. Und mit einem weiteren angehängten "sed" Befehl könnte man nach Teile der gefundenen Zeile herausschälen:

cat datei.txt | grep suchstring | sed "s/PATTERN/REPLACEMENT/"

Das Pattern um etwas WEG-zuschälen ist etwas komplizierter. Prinzipiell müsstest du die gesamte Zeile beschreiben
^.*suchtext\(.*\)$
d.h. Zeilenanfang - beliebige Zeichen - Suchtext - beliebige Zeichen - Zeilenende

durch die Klamern kann man die zweite Gruppe beliebiger Zeichen im Replacement durch \1 adressieren.

Der Tausch tauscht also die ganze Zeile gegen \1 aus.

Greetz
Thomas
man grep
man sed

die_Eule
07.05.06, 11:35
irgendwie will das nicht funktionieren. Mal ganz einfach angekommen: Ich habe die Zeichenkette die überarbeiten will mit:

Suchstring: hallo
Ersatzstring: muh

Dann soll er mir die den Text durchsuchen und hallo durch muh ersetzen. Das würde ich so machen:

sed /"hallo"/"muh"

Funktioniert natürlich nicht annähernd. Kann mir das mal bitte einer genau erklären?

Danke schon mal im Voraus.

tschloss
07.05.06, 11:47
...| sed "s/hallo/muh/"

Wird dich aber nur indirekt weiterbringen, weil du ja nicht das Suchpattern austauschen willst, sondern alles löschen ausßer den paar Zeichen nach dem SUchpattern.

Greetz
Thomas

die_Eule
07.05.06, 12:08
Vom Verständnis hat es mich viel weiter gebracht.
Noch eine Frage: Gibt es eine Möglichkeite einen Audruck zu verneinen? Wie das ! bei C++ ?

tschloss
07.05.06, 12:50
Vom Verständnis hat es mich viel weiter gebracht.
Noch eine Frage: Gibt es eine Möglichkeite einen Audruck zu verneinen? Wie das ! bei C++ ?
Wo?
Meistens ja. Bei grep ist das ein spezieller Schalter (alle Zeilen die Suchmuster NICHT enthalten). (man grep)
Bei obigem sed-Beispiel macht Negation keinen Sinn, oder?

Es gibt gute Bücher und Büchlein zum Thema "sed, awk und Reguläre Ausdrücke" (O`Reilly zB). Lohnt sich - braucht man unter Linux ständig!

Greetz
Thomas

die_Eule
07.05.06, 13:00
Ah. Danke. Hast mir viel geholfen. Ich habe es jetzt hinbekommen.
Übers Buch werd ich sicherlich nachdenken und mir auch holen, wenn ich mal wieder in Geld schwimme.

Danke nochmals.