PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchen-und-ersetzen (Perl? sed?)



Jesus_666
10.01.2004, 20:10
Ich schreibe gerade ein Programm mit Fluid, der IDE/RAD-Umgebung von FLTK.
Fluid ist eigentlich ganz witzig, nur hat es ein Problem: Das Einbinden eigener Widgets ist etwas problematisch. Ich habe also vor, einfach eine Box in mein App zu setzen, ihr einen bestimmten Namen zu geben und dann, vor dem Kompilieren, alle Referenzen zu dieser Box durch anceren Code zu ersetzen.

Okay, so weit ist ja alles klar. Ich suche die Zeile, ich ersetze sie mit meinem Code, ich kompiliere.
Nur will ich nicht jedes Mal, wenn ich in Fluid eine Änderung am Programm vornehme, den Code von Hand umgraben.

Also brauche ich eine Möglichkeit, Folgendes (von der Shell aus; möglichst mit einer Zeile) zu tun:

1.) Zeilen á la GenericWidget *GW_Table00=(GenericWidget *)0; in einer Datei finden
2.) Die gefundenen Zeilen mit beliebigem Text ersetzen

Ich denke, daß Perl so was könnte; sed würde sich auch anbieten. Allerdings kenne ich mich mit beiden nicht aus.

Hat jemand Infos, wie ich das hinkriege?

MuadDib
10.01.2004, 21:26
Hm, versuch einmal das:

perl -p -i -e 's/\btext-zum-suchen\btext-zum-ersetzen/g' datei.endung

Edit: sollte das nicht gehen, lass die \b weg.

Jesus_666
10.01.2004, 22:31
Wie verträgt sich Perl mit Linebreaks/Sonderzeichen? Optimal wäre ja, daß ich eine Datei, einen Suchstring und noch eine Datei angebe und dann der Inhalt der zweiten Datei den gesuchten String überschreibt.

Also in etwa so:

foobar datei1.abc -parameter "*GW_Table00=(GenericWidget *)0;" --otherparameter datei2•••••

oder meinetwegen so:

replacestring << datei2•••••
foobar datei1.abc s/"*GW_Table00=(GenericWidget *)0;"/replacestring

oder irgendwie

Ich habe kein Problem damit, wenn mehrere Perl-Zeilen benötigt sind, wenn ich das alles in eine Perl-Datei packen und so ausführen kann. Das wäre mir sogar lieber, weil ich so mehrere Austausche mit einer Zeile im Makefile hinkriege.

MuadDib
10.01.2004, 23:54
puh, da fragst du mich schon zuviel :) Meine Perl-Erfahrung geht auch nicht viel weiter als einfache Counter-Scripts für Websites und eben ein paar Shell-Commands. Such einfach im Google nach "Suchen Ersetzen Perl", da müsstest du fündig werden...

Jesus_666
11.01.2004, 00:51
Ich glaube, ich kompiliere PHP als CGI-Binary und mache das über ein PHP-Script. Da weiß ich wenigstens, wie ich es machen muß.

MuadDib
11.01.2004, 01:02
ROFL :D

Aber, was anderes: Warum schreibst du nicht gleich ein kleines Tool in C? Wenn ich mich nicht irre hab ich sogar noch irgendwo einen Search&Replace Algorithmus rumliegen...

Jesus_666
11.01.2004, 01:51
1.) In C++ muß ich mir den Großteil der Funktionen selbst schreiben; in PHP brauche ich nur ein paar Standard-Zeilen.

2.) In C++ müßte ich erst diverse Puffer in diversen Größen definieren, die dann auch noch in meine selbstgeschriebenen Funktionen passen müßten. In PHP lade ich einfach den Inhalt einer Datei in eine Variable undefinierter Größe, nicht mal in irgendeiner Form definiert sein muß.

3.) PHP als CLI-Programm zu kompilieren hat fünf Minuten gedauert und das Skript zu schreiben wird auch nicht lange dauern. Ein entsprechendes Programm in C++ wäre ein ganz neues, nicht gerade kleines Subprojekt, für das ich ATM keine Zeit habe.

4.) Ich brauche diese Funktionalität, um an einem anderen Projekt weiter arbeiten zu können. Es wäre unzweckmäßig, erst mal zwei Wochen in ein unnötig aufwendiges Programm zu investieren, wenn ich entsprechende Funktionalität mit PHP schon in der Hand habe.

MuadDib
11.01.2004, 20:35
Das ist mir schon klar, das ganze war ja auch nur als Scherz gesehen. Wie auch immer... mit Java und dergleichen wäre das ganze auch weit unaufwendiger und eine Arbeit auf 5 Minuten, dennoch hab ich mich einmal dazugesetzt und versuche nun in ANSI-C ein kleines Search & Replace Programm zu machen :D

Jesus_666
11.01.2004, 21:12
Ich habe AFAIK unter Cygwin keine VM, außerdem habe ich keine Ahnung, wie Java von der Kommandozeile aus läuft.

MuadDib
11.01.2004, 21:23
Original geschrieben von Jesus_666
Ich habe AFAIK unter Cygwin keine VM, außerdem habe ich keine Ahnung, wie Java von der Kommandozeile aus läuft.

Kompilieren:
javac MyClass.java

Auführen
java MyClass [optionale Parameter]

:D
Das Parameter-Parsen läuft wie in C. War auch nur nebenbei bemerkt. Java enthält mit der StringBuffer Klasse einige nette Funktionen zum Stringändern parat.

Mein kleines C-Programm nimmt übrigens schon Gestalt an :). In Strings kann ich schon suchen und ersetzen, in Dateien noch nicht ganz...