Auf der Suche nach einem Suchbegriff in einer Datei mit diesen Linien zur Verarbeitung in TCL
Um genauer zu sein:
Brauche ich für die Suche in einer Datei abc.txt welche Inhalte hat so etwas wie dieses:
files/f1/atmp.c 98 100
files/f1/atmp1.c 89 100
files/f1/atmp2.c !! 75 100
files/f2/btmp.c 92 100
files/f2/btmp2.c !! 85 100
files/f3/xtmp.c 92 100
Muss das Skript " zu finden!!" und verwenden Sie diese Zeilen, um drucken Sie die folgende Ausgabe:
atmp2.c 75
btmp2.c 85
Hilfe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
dies sollte den trick tun.
Obwohl regexp hat -alle wechseln, ich glaube nicht, dass wir verwenden können es hier bekommen wir nur noch das Letzte match vars mit -alle
Wenn Ihre Datei ist nicht riesig, können Sie schlürfen die ganze Sache in Erinnerung, teilen sich die Linien in eine TCL-Liste, und dann Durchlaufen Sie die Liste durch und sucht nach übereinstimmungen. Zum Beispiel:
Diese erfolgreich zurück nur die Zeilen mit "!!" in Ihnen ist. Mit Ihr gepostet corpus, die Ergebnisse sind:
Könnte ich versucht sein, in diesem Fall, um exec zu awk:
Der trick ist, kombinieren Sie den code, der liest die Zeilen aus der Datei mit einem regulären Ausdruck, der erkennt, passende Zeilen und extrahiert die relevanten Teile (one-step-Prozess mit
regexp
). Der einzige schwierige Teil ist herauszufinden, was genau zu verwenden, da der reguläre Ausdruck, so dass Sie genau das bekommen, was Sie wollen. Ich werde zu erraten, dass Sie nach der Teile der Dateinamen nach der/
, dass die Dateinamen nicht enthalten Leerzeichen, und dass die Zahl, die Sie suchen, ist die Gesamtheit der ersten Ziffernfolge nach dem doppelten Ausrufezeichen. (Andere Formate sind möglich, von denen einige sind leichter zu extrahieren, mit anderen tools wiescan
.) Das würde uns etwas geben, wie diese:(Die
gets
Befehl mit zwei Argumenten gibt die Länge der Zeile zu Lesen, oder-1
auf Fehler. Für normale Dateien der einzige Ausfall-Modus ist EOF, so können wir nur beenden die Schleife, wenn wir einen negativen Wert. Andere Arten von Kanälen können komplexer sein...)