CSS-Script mit sed modifizieren

  • Hallo zusammen,

    in einer php-Datei gibt es ein css-Script für style.

    In einem Abschnitt wird die Farbe für die Zahlen in einem online-Kalender an die Hintergrundfarbe angepasst.

    Die Hintergrundfarbe berechnet sich aus der Durchschnittsfarbe eines in den Kalender integrierten Bildes.

    Das Bild wird wöchentlich gewechselt.

    Das heißt: wöchentlich ändert sich die Hintergundfarbe --> wöchentlich ändert sich die Farbe für die Zahlen.

    Mit sed -i ... ändere ich die Hintergrundfarbe in dem php-Script.

    Nun wollte ich auch die Farbe der Zahlen mit sed ändern. Dabei gibt es folgendes Problem:

    Die Zeile, in der die Farbe für die Zahlen steht, sieht so aus:

    color:#424242; /*Farbe*/

    Der Kommentar /*Farbe*/ ist deshalb wichtig, weil es in dem css-Abschnitt noch mehr color:# -Anweisung gibt, die nicht ersetzt werden dürfen!

    Ich habe es auf zwei Arten versucht, aber es klappt nicht.

    1. sed -i "s/color:.* \/*Farbe*\//color:${farbe2}; \/*Farbe*\//" /var/www/html/kalender/kalender_inc.php
    2. sed -i "s|color:.* /*Farbe*/|color:${farbe2}; /*Farbe*/|" /var/www/html/kalender/kalender_inc.php

    Beide Varianten von hier: https://ger.bizexceltemplates.com/50-practical-e…d-command-linux

    Es gibt keine Fehlermeldung, aber es passiert in der php-Datei nichts.

    Was mache ich falsch?

    Danke Thomas

  • Das Problem bei deinem RegEx ist, dass du das * nicht escaped hast. Ein * in RegEx heißt ja "der vorherige Token 0 bis unendlich mal". Deshalb muss vor das * ein \, damit es als das Zeichen erkannt wird und nicht als RegEx-Befehl.

    Dieser sed-String funktioniert für mich:

    Code
    's/color:.*\/\*Farbe\*\//color:{farbe2} \/*Farbe*\//'

    Du musst aber auch bedenken, dass so ein RegEx bzw. sed-Befehl u.U. schnell kaputtgehen kann, z.B. wenn hinter color: ein Leerzeichen ist oder der Kommentar weg / verändert ist. Wenn möglich ist es auf jeden Fall besser, das direkt in PHP zu implementieren oder die Farben erst in eine andere Datei (etwas, was man ohne RegEx verändern kann z.B. json) zu speichern und diese dann in PHP zu lesen.


    Edit: Leider zu lange gebraucht :D

  • Als Ergänzung

    So was würde ich immer trennen, Code & Layout, Programmlogik und Styling

    Wenn schon CSS und PHP, dann eher so (ungetestet)

    CSS
    /* css.tpl */
    .class {
        color: @@color1@@;
    }
    PHP
    // css.php
    
    // Farbe ausrechnen
    $color = '...';
    
    // Alle "Variablen" zusammenstellen
    $replace = [ '@@color1@@' => $color /* , ... and so on */ ];
    
    header('Content-Type: text/css');
    echo str_replace(array_keys($replace), array_values($replace), file_get_contents('css.tpl'));

    Mal caching etc. außen vor.

    Und dann

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

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!