Aquariophile: in 1200 Files, je eine bestimmte Zeile editieren

Hallo!

In einem Verzeichnis liegen 1200 HTML-Dateien.

In der HTML-Datei soll eine zeile (nicht immer in der selben zeile),
aber immer der gleiche inhalt, durch eine kleine aenderung ersetzt werden.

Und zwar:
<link rel="stylesheet" type="text/css" href="/styles/stylesheet.css">

soll werden zu:
<link rel="stylesheet" type="text/css" href="stylesheet.css">

Frage:

Muss ich die unbedingt alle von Hand editieren,
oder hat jemand eine Kluges Script das das kann?

Danke!
Aquariophile

  1. Hi,

    wenn Du sicher bist, dass in dr Zeile wirklich immer das gleiche steht, kein zusätzliches Leerzeichen oder so, dann kannst Du Dir doch selber ein Script schreiben. Das geht sogar mit PHP und das kannst Du ja.

    <link rel="stylesheet" type="text/css" href="/styles/stylesheet.css">

    soll werden zu:
    <link rel="stylesheet" type="text/css" href="stylesheet.css">

    <?php  #### ersetze.php ####

    if($HTTP_POST_VARS["suche"] and $HTTP_POST_VARS["ersetze"])
    {

    // Dateien im Verzeichnis suchen
      while()
      {
        //Ist es eine Datei?
        if()
        {

    //Datei öffnen/einlesen/schließen

    //Zeile suchen

    //Zeile austauschen

    //Datei zum Schreiben öffnen

    //Daten wegschreiben

    }
        //nächste Datei
      }

    }

    ?>

    <html>
    <head>
      <title>Suche - Ersetze</title>
    </head>
    <body>

    <form name="replace" action ="<?= $HTTP_SERVER_VARS["PHP_SELF"] ?>"
          method="post" enctype="multipart/form-data"
          value="<?=$HTTP_POST_VARS["suche"]?>">
    <p class="input"><input type="text" name="suche"
                            size="60" maxlenght="80"></input></p>
    <p class="input"><input type="text" name="ersetze"
                            size="60" maxlenght="80"
                            value="<?=$HTTP_POST_VARS["ersetze"]?>"></input></p>

    </form>

    </body>
    </html>

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Hi,

    In der HTML-Datei soll eine zeile (nicht immer in der selben zeile),
    aber immer der gleiche inhalt, durch eine kleine aenderung ersetzt werden.

    wenn Du den Phase 5 hast Freeware http://www.meybohm.de, dann geht das dort mit Dateiübergreifendem Suchen/Ersetzen völlig problemlos.

    Gruß
    Frank

  3. Hallo,
    hier eine mögliche Lösung mit Perl, falls du es installiert hast:
    (Das Script muss sich im gleichen Verzeichnis wie die Dateien befinden)

    #!/usr/bin/perl -w

    use strict;

    my @dateien = ();

    opendir(DIR,'.') or die "Kann dieses Verzeichnis nicht oeffnen, weil : $!\n";
    while (defined($_ = readdir(DIR)))  {
         if ($_ =~ /^.+?.html?$/i)  {
         push @dateien, $_;
         }
    }
    closedir DIR;

    foreach(@dateien)   {
          open(FILE,"+<$_") or die "Kann $_ nicht oeffnen, weil : $!\n";
          local $/;
          my $in = <FILE>;
          $in =~ s/<link rel="stylesheet" type="text/css" href="/styles/stylesheet.css">/<link rel="stylesheet" type="text/css" href="stylesheet.css">/s;
          seek FILE, 0, 0;
          truncate FILE, 0;
          print FILE $in;
          close FILE;
    }

    --
    Weissagung der Cree:
    Erst wenn der letzte Baum gerodet, der letzte Fluss vergiftet, der letzte Fisch gefangen, werdet ihr feststellen, dass man Geld nicht essen kann!
  4. Hi,

    In einem Verzeichnis liegen 1200 HTML-Dateien.
    In der HTML-Datei soll eine zeile (nicht immer in der selben zeile),
    aber immer der gleiche inhalt, durch eine kleine aenderung ersetzt werden.

    JEDER brauchbare Editor bietet dateiübergreifendes Suchen/Ersetzen.
    Ein Editor, der das nicht bietet, ist nicht brauchbar...

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
  5. Hallo Aquariophile,

    In der HTML-Datei soll eine zeile (nicht immer
    in der selben zeile), aber immer der gleiche
    inhalt, durch eine kleine aenderung ersetzt
    werden.

    Und zwar:
    <link rel="stylesheet" type="text/css"
    href="/styles/stylesheet.css">

    soll werden zu:
    <link rel="stylesheet" type="text/css"
    href="stylesheet.css">

    Einfach, sehr einfach:

    find . -name "*.html" -exec perl -pi -e 's!<link rel="stylesheet" type="text/css" href="/styles/stylesheet.css">!<link rel="stylesheet" type="text/css" href="stylesheet.css">!g' {} ;

    Gruesse,
     CK