![]() |
grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Hallo!
Kennt ihr eine Möglichkeit, grep (oder einem anderen, möglichst kostenlosem Tool) beizubringen, das es nur die direkten Treffer ausgeben soll und nicht die ganzen enthaltenden Zeilen? Wenn ich bspw. (mit RegEx) nach
Delphi-Quellcode:
suche, kriege ich ein Liste in folgender Art
MyFunction\(\d+\)
Code:
Wünschen würde ich mir sowas:
Result := MyFunction(42);
if MyFunction(666) > 0 then Result := MyFunction(11) + MyFunction(22);
Code:
MyFunction(42)
MyFunction(666) MyFunction(11) MyFunction(22) |
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Indem du das, was nicht enthalten sein soll, auch nicht in das Ergebnis aufnimmst?
> look-ahead assertion ...(?=...) und > look-behind assertion (?<=...)...
Code:
[edit]
(?<=MyFunction\()\d+(?=\))
(?<=MyFunction\()[0-9]+(?=\)) falsch verstanden... Wieso sollte es denn die ganze Zeile liefern? Wenn man nur nach "MyFunction\(\d+\)" sicht, dann bekomme man eigentlich auch nur "MyFunction(...)" raus. Wenn nicht, dann machst du was falsch und da keiner verraten hat, wie er es macht, wissen wir auch nicht was er falsch macht. :angle2: |
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Zitat:
Zitat:
Delphi-Quellcode:
. Dabei ist Lpar eine Funktion, die einen Zeiger auf ein Array zurückliefert, und ich suche nach Aufrufen der Funktion + Array-Indizierung. (Bitte keine Kommentare zu dieser Konstruktion - ist ererbt.)
Lpar^[...]
Wenn ich mit GExperts-Grep nach
Delphi-Quellcode:
suche, kriege ich eine Liste von Zeilen, die das Muster enthalten. Ebenso, wenn ich in der Kommandozeile
Lpar\^\[.*\]
Delphi-Quellcode:
eintippe. Mache ich da schon was falsch? :?::shock:
grep -d+ -h+ -i+ "Lpar\^\[.*\]" *.pas
|
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Wobei die GExperts-Suche und auch die delphieigene Suche (inkl. RegEx) ja genau/absichtlich darauf ausgelegt sind dir die Zeilen zu zeigen, wo das Gesuchte enthalten ist. :zwinker:
Was das Programm "grep" machen soll, weiß ich nicht. |
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Zitat:
|
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
als Schnellschuss, nicht optimiert
Project3 C:\temp\test.txt MyFunction(%)
Delphi-Quellcode:
program Project3;
{$APPTYPE CONSOLE} uses SysUtils; var f:TextFile; Buffer,SToken,EToken:String; Procedure FindToken; var i,j:Integer; begin i := pos(SToken,Buffer); while i>0 do begin Buffer := Copy(Buffer,i+Length(SToken),Length(Buffer)); j := Pos(EToken,Buffer); Writeln(SToken + Copy(Buffer,1,j)); Buffer := Copy(Buffer,j+1,Length(Buffer)); i := pos(SToken,Buffer); end; end; begin try Stoken := Copy(Paramstr(2),1,Pos('%',Paramstr(2))-1); Etoken := Copy(Paramstr(2),Pos('%',Paramstr(2))+1,Length(Paramstr(2))); AssignFile(f,Paramstr(1)); Reset(f); while not Eof(f) do begin ReadLn(f,Buffer); FindToken; end; Readln; CloseFile(f); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Zitat:
Ich bin mittlerweile auf eine quellcodefreie Lösung gekommen:
|
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Das wäre vielleicht ein Job für den Stream Editor (SED) gewesen.
einige SED Beispiele: ![]() |
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Zitat:
|
AW: grep: nur eigentliche Matches ausgeben (nicht die ganze Zeile)
Warum so umständlich?
Im Manual findet sich folgender Parameter: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz