Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von kmuc, 08.12.2011.

  1. kmuc

    kmuc Grünschnabel

    Dabei seit:
    08.12.2011
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe bereits diverse Google-Suchergebnisse durchforstet, habe jedoch nirgendwo eine verwertbare Lösung für mein Anliegen gefunden.
    Vermutlich liegt dies aber auch an meiner fehlenden Erfahrung, daher möchte ich euch um Hilfe bitten.

    Ich habe eine Datei mit einem vacation Bereich und möchte über ein Bash-Skript den Text des Autoresponders ändern können.

    Der Dateiinhalt dieser Datei ist wie folgt strukturiert:

    Code:
    require  ["fileinto","vacation"];
    vacation :days 1 :addresses ["adresse1@domain.de", "adresse2@domain.de"] 
    [B]"Autoresponder-Text"[/B];
    if header :container "subject" "***SPAM" {
    fileinto "INBOX.Spam";
    }
    elsif [...]
    
    Das "Autoresponder-Text" ist der Bereich, den ich ändern möchte.

    Jetzt würde ich gerne nach "; suchen, da dies in jeder Datei das Ende des Autoresponder-Textes darstellt.
    Den Anfang kann man mit ] " (mit Leerzeichen) definieren.
    Wie kann ich jetzt mit einem Befehl diese festgesetzten Grenzen setzen?

    Geht das überhaupt?

    Mit awk und sed sehe ich da gerade keine vielversprechenden Möglichkeiten, da man offenbar keine unterschiedlichen "Grenzen" übergeben kann, oder?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Remidemi, 09.12.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hi

    Was möchtest du ändern? Definiert bitte nochmal den Start und raw ende des Bereichs .. ich raffs Net.
     
  4. kmuc

    kmuc Grünschnabel

    Dabei seit:
    08.12.2011
    Beiträge:
    5
    Zustimmungen:
    0
    Das fettgedruckte in dem Codeabschnitt, bzw. genauer: das fettgedruckte ohne die Anführungszeichen, also das Autoresponder-Text, wobei dieser inhaltlich natürlich immer anders aussieht. Man kann also nicht nach dem Text selber suchen.

    kurz gesagt: suche die erste Stelle im Text, die ] " (eckige Klammer,Leerzeichen,Anführungszeichen) ist und gib mir von dort an den gesamten Text bis "; (anführungszeichen,semikolon) erscheint.
     
  5. #4 HeadCrash, 09.12.2011
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Moin,

    Mit einer Skriptsprache deiner Wahl, das ganze Zeilenweise durchgehen und die Zeilen bis "vacation :days*" einfach ausgeben, meintet wegen nach "head.vacation.rule".
    Dann alles von "if header :container*" nach footer.vacation.rule schreiben.

    Und am Ende "cat head.vacation.rule NEUER_TEXT footer.vacation.rule" > vacation.rule.

    Nur weil du das dann im Textfile geändert hast, heißt das aber noch nicht, dass der dahinterstehende Imap-Server das aber auch anzieht.
    Weiß grade nicht mehr welchen wir hie reinsetzten, aber hier mussen wir den Imap-Server dazu auffordern das ganze noch für sich selbst zu kompilieren.

    mfg
    HeadCrash
     
  6. #5 kmuc, 09.12.2011
    Zuletzt bearbeitet: 09.12.2011
    kmuc

    kmuc Grünschnabel

    Dabei seit:
    08.12.2011
    Beiträge:
    5
    Zustimmungen:
    0
    Danke für die gute Idee.
    Ich hab jetzt folgendes:

    Code:
    while read line; do
            if expr "$line" : "vacation :days" > /dev/null || expr "$line" : "require" > /dev/null ; then
                    header="$line"
                    echo "$header"
            fi
    done < default2
    
    while read line; do
            if expr "$line" : "if header :contains" > /dev/null ; then
                    footer="$line"
                    echo "------------"
                    echo "$footer"
            fi
    done < default2
    
    Die Ausgaben passen mit Ausnahme der Tatsache, dass beide mit expr: Syntaxfehler durchlaufen. Wieso?

    edit... die footer Ausgabe passt doch noch nicht... aber das hat mit dem expr. Syntaxfehler nichts zu tun :(
     
  7. #6 Remidemi, 09.12.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Ich hätte gedacht dass du den : bei :days und :contains escapen musst...aber funktioniert bei mir auch ohne.

    Rufe dein Script mal mit bash -x script.sh auf.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. kmuc

    kmuc Grünschnabel

    Dabei seit:
    08.12.2011
    Beiträge:
    5
    Zustimmungen:
    0
    mit -x ist auch kein Fehler zu sehen.

    Mal was anderes:
    Wie kann ich denn ausdrücken, dass mir der Inhalt ab der Zeile mit "if header:contains" zurückgegeben wird?
    D.h. die Zeile mit "if header:contains" plus alles was danach folgt...
     
  10. #8 kmuc, 10.12.2011
    Zuletzt bearbeitet: 10.12.2011
    kmuc

    kmuc Grünschnabel

    Dabei seit:
    08.12.2011
    Beiträge:
    5
    Zustimmungen:
    0
    Ich habs mittlerweile nochmal komplett neu angefangen, stoße gerade aber auf folgendes Problem:

    Code:
    if `echo $entry | awk -v FS=" " '{print $3}'` = "$datum" ; then
    datum enthält das heute Tagesdatum im Format DD.MM.YYYY
    Selbiges befindet sich in dem gefilterten $entry, beim Aufruf wird mir dann aber gesagt
    "mysql.sh: Zeile 13: 09.12.2011: Kommando nicht gefunden."

    Sieht da jmd. von euch auf Anhieb den Fehler?

    edit: Hat sich erledigt... ich habs die [ ] um die Bedingung vergessen Oo
     
Thema: Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen
Besucher kamen mit folgenden Suchen
  1. suchen ersetzen bash script

Die Seite wird geladen...

Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen - Ähnliche Themen

  1. Text ersetzten per Bash-Skript

    Text ersetzten per Bash-Skript: Hallo Board, ich möchte in der smb.conf eine Zeile mit einer andere ersetzen. aus # passdb backend = ldapsam:"ldap://bar.foobar.org" ## LEAVE...
  2. Debian: Bash-Skript darf nur (weiter)laufen, wenn Bildschirmschoner an

    Debian: Bash-Skript darf nur (weiter)laufen, wenn Bildschirmschoner an: Hallo zusammen, ich bräuchte mal einen Hinweis. Ziel ist es, dass das Bash-Skript nur läuft, wenn der PC gerade nicht benutzt wird. Ich dachte...
  3. [BASH-Skript] Wildcard gesucht zum sed-Kommando

    [BASH-Skript] Wildcard gesucht zum sed-Kommando: Hallo zusammen. Habe ein Skript erstellt, was mir auf Dauer die Arbeit erleichtern soll. ---------- #!/bin/bash #programm mkdir.sh # $1 ==...
  4. Mit Bash-Skript einen Datensatz auslesen?

    Mit Bash-Skript einen Datensatz auslesen?: Bin gerade dabei ein paar Schritte mit MySQL zu unternehmen. Das auslesen von Datensätzen per Hand funktionniert. Wie kann ich aber einen...
  5. bash-Skript array decalrieren

    bash-Skript array decalrieren: Hi , ich will mir per skript und cron immer ein paar Dateien bearbeiten . Mein Problem dabei ist, das er die Variblen nicht als string...