Ergebnis 1 bis 10 von 10

Thema: Suchen-und-ersetzen (Perl? sed?)

  1. #1

    Suchen-und-ersetzen (Perl? sed?)

    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?

  2. #2
    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.

    Geändert von MuadDib (10.01.2004 um 20:34 Uhr)

  3. #3
    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.

  4. #4
    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...

  5. #5
    Ich glaube, ich kompiliere PHP als CGI-Binary und mache das über ein PHP-Script. Da weiß ich wenigstens, wie ich es machen muß.

  6. #6
    ROFL

    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...

  7. #7
    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.

  8. #8
    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

  9. #9
    Ich habe AFAIK unter Cygwin keine VM, außerdem habe ich keine Ahnung, wie Java von der Kommandozeile aus läuft.

  10. #10
    Zitat Zitat
    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]


    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...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •