String in mehreren Dateien ersetzen

Dieses Thema: "String in mehreren Dateien ersetzen" im Forum "Shell-Skripte" wurde erstellt von The Crusher, 26.08.2005.

  1. #1 The Crusher, 26.08.2005
    The Crusher

    The Crusher Grünschnabel

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

    ich bräuchte ein Shell-Skript, das folgendes tut:

    - lese alle Dateien im aktuellen Verzeichnis, die auf .html enden, ein
    - ersetze in all diesen Dateien den String "/icon" durch "icon"
    - speichere die Dateien dann wieder ab

    Ist wahrscheinlich für euch Cracks hier kein Problem. :) Das blöde ist, dass ich das Skript eigentlich sofort brauche und so schnell werde ich es nicht hinbekommen. Bin noch unerfahren im Shell-Skripting und würde mich über Hilfe freuen !

    Thanx,
    The Crusher
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. hex

    hex Lebende Foren Legende
    Moderator

    Dabei seit:
    10.12.2003
    Beiträge:
    1.775
    Zustimmungen:
    0
    Ort:
    Stuttgart
    Ich würde dir einen HTML-Editor empfehlen, welcher "Suchen und Ersetzen" kann, z.B. Bluefish. Das umständliche programmieren eines Shell-Skriptes wäre imho reine Zeitverschwendung! :)

    EDIT: Oder hast du nur eine Konsole zur Verfügung? Dann ist Bluefish natürlich keine Lösung *g*


    mfg hex
     
  4. #3 The Crusher, 26.08.2005
    The Crusher

    The Crusher Grünschnabel

    Dabei seit:
    26.08.2005
    Beiträge:
    5
    Zustimmungen:
    0
    Nee, ich brauche definitv ein Shellskript ...
     
  5. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Code:
    #!/bin/sh
    WORKDIR=/dein/html/verzeichnis/
    
    cd $WORKDIR
    for i in `ls *.[hH][tT][mM][lL]`
    do
       mv $i $i.tmp
       cat $i.tmp | sed -e 's/\/icon/icon/g' >> $i
       rm $i.tmp
    done
    
    So auf die schnelle.
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    find . -iname "*.html" -depth 1 -exec sed -i "" -e "s/\/icon/icon/g" {} \;
    Gruss, Phorus
     
  7. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    @Phorus:
    Hehe, und wenn jetzt noch der Wolfgang seinen perl-Einzeiler vom Stapel lässt (*duck*), dann bestätigen wir wiedermal, dass doch nichts über kryptisch verkettete Befehle geht ;) .
     
  8. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    :)

    Perl ist leider nicht erlaubt.

    Gruss, Phorus
     
  9. #8 The Crusher, 26.08.2005
    The Crusher

    The Crusher Grünschnabel

    Dabei seit:
    26.08.2005
    Beiträge:
    5
    Zustimmungen:
    0
    Super ! Danke für die schnelle Hilfe, Jungs !
     
  10. #9 Wolfgang, 26.08.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    :D :D
    Hehe
    auch wenn es verboten ist
    perl -pi -e '~s|/\.icon|icon|' *html
    IMHO mit GNU sed
    sed -i -e '~s|/\.icon|icon|' *html

    Gruß Wolfgang
     
  11. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Arg, da hab ich vor lauter Bäumen den Wald nicht gesehen :)
     
  12. whitey

    whitey Grünschnabel

    Dabei seit:
    10.10.2005
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo ihr lieben,

    der Einzeiler ist ja schon echt super.
    Ich hab ein aehnliches Problem, aber ich glaube nicht das man es in eine Zeile packen kann.

    Die Zeile...
    Code:
     perl -pi -e '~s|subdomain\.domainname\.org|neu-subdomain\.domainname\.org|' * 
    ...wandelt mir meinen String wie gewuenscht um.
    subdomain.domainname.org wird umbenannt in neu-subdomainname.org

    Leider wird aber auch...
    neusubdomain.domainname.org umbenannt in
    neu-neusubdomainname.org

    Und da ist der haken. Ich muss alle ascii zeichen ausklammern vor dem subdomain.domain.org jedoch steht vor dem subdomain.domain.org of ein " , / , : oder leerzeichen die erlaubt sein soll. Wobei wir beim dem anscheinend sehr beliebten Thema Regular Expressions waeren .

    Soweit hab ich mich schon schlau gemacht
    [^0-9a-zA-Z] vor subdomain.domain.org sollen verboten sein.
    fuer Grep also [[:alnum:]]
    Die restlichen moeglichen Zeichen die evtl zu erwarten waeren und eine Aenderung ausschliessen sollen:
    - _ @ # .
    [[:alnum]_-\@\#\.]

    Also muss ich ein Shellskript schreiben.
    Nur wie ? (ich bin totaler noob)
    Es muss auch in Unterverzeichnissen geaendert werden...

    Es wuerde schon helfen ersteinmal alle eintraege zu aendern die mit
    [\"] anfangen.

    Es waere nett wenn mir jemand dabei helfen wuerde dieses Skript auszuformulieren.
     
  13. #12 Xanti, 10.10.2005
    Zuletzt bearbeitet: 10.10.2005
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wie gewünscht, der Einzeiler ;)

    Code:
    find . -type f -exec perl -pi -e '~s/(?<![\w_\-@#.])subdomain.domainname.org/neu-subdomain.domainname.org/g' {} \;
    
    Gruss, Phorus
     
  14. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Die Perlloesung wird IMHO verlaesslicher sein da inline-editing nicht bei allen sed-Derivaten supportet ist (inline-editing = editieren direkt in der Datei ohne temporaere Datei zu erstellen). Ich denke das ist der -i Schalter (arbeite hauptsaechlich mit sed unter Solaris, dort isses bei Standard-SED auf Solaris 8 nicht moeglich inline zu arbeiten).
     
  15. #14 Wolfgang, 10.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry, aber so recht klar ist mir nicht was du willst.
    Erster Hinweis:
    [\"] beschreibt die Zeichenklasse für zwei Zeichen! Matcht auf Backslash ( \ ) oder Dobblequota ( " ) , was du wahrscheinlich nicht willst.
    In Zeichenklassen bleiben alle Zeichen unescapet als solche erhalten. Ausnahme ist nur ] und - ( was nicht am Ende stehen darf.)
    Suchst du also nach einem String der mit " beginnt und mit einem weiteren " endet (also zwischen "bal fasel " steht, dann wäre das etwa so:
    Um den ersten zwischen doppelten Anführungszeichen stehenden String rauszuschnedein:
    ~s/^["]([^"].*?)["].*/$1/g
    Zweiter Hinweis:
    Bring doch mal ein paar Beispieldaten und das entsprechen gewünschte.

    [[:alnum:]_-@#.] Diese Zeichen sollen nicht ersetzt werden, wenn sie wo stehen?

    Lass also mal ein paar Infos mehr sehen, dann kann ich eventuell helfen.
    Gruß Wolfgang
     
  16. #15 Wolfgang, 10.10.2005
    Zuletzt bearbeitet: 10.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Ähm will ja nicht altklug sein, aber das matcht unter Umständen zu viel weg, (greedy-modus) ;)
    Code:
    find . -type f -exec perl -pi -e '~s/(?<![\w_\-@#.][b].*?[/b])subdomain[b]\.[/b]domainname[b]\.[/b]org/neu-subdomain.domainname.org/g' {} \;
    
    Auch könnte es wahrscheinlicher sein, dass noch ein \s vor der subdomain stehen muss ( muss aber nicht sein, auch wenn es wahrscheinlich ist) dann würde ich davor noch \b bringen.

    Nur so als Gedankenspielerei
    :D
    Gruß Wolfgang
    PS Der Punkt muss natürlich escapet werden.
     
Thema: String in mehreren Dateien ersetzen
Besucher kamen mit folgenden Suchen
  1. string in mehreren dateien ersetzen linux

Die Seite wird geladen...

String in mehreren Dateien ersetzen - Ähnliche Themen

  1. In mehreren Unterverzeichnissen nach einem String suchen

    In mehreren Unterverzeichnissen nach einem String suchen: hallo, möchte am besten mit nur einem Befehl nach einem bestimmten String in mehreren Verzeichnissen suchen. 1) grep "String" *.html sucht ja...
  2. Editor, ersetzen von strings im mehreren Files

    Editor, ersetzen von strings im mehreren Files: Hallo, ich suche einen einfachen buttonorientierten Editor, der mir einen String in zahlreichen geladenen Textfiles gleichzeitig ersetzt,...
  3. FIND mit UND-Verknüpfung im Suchstring

    FIND mit UND-Verknüpfung im Suchstring: Hallo, ich schaffe es einfach nicht bei folgendem Kommando die Suchoptionen zu erweitern, damit nur Dateien beginnend mit "T_*" aufgelistet...
  4. String auf Konsole ausgeben

    String auf Konsole ausgeben: Hallo zusammen, ich bin auf ein Problem gestoßen dass für mich sehr unverständlich ist, aber vllt übersehe ich auch etwas Offensichtliches. Es...
  5. String einer bestimmten Zeile durchsuchen

    String einer bestimmten Zeile durchsuchen: Hallo, wie kann ich den eine bestimmte Zeile einer Textdatei zerlegen und daraus ein Stück entnehmen? Ich suche nach der Zeile in der "model...