String in mehreren Dateien ersetzen

Diskutiere String in mehreren Dateien ersetzen im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo zusammen, ich bräuchte ein Shell-Skript, das folgendes tut: - lese alle Dateien im aktuellen Verzeichnis, die auf .html enden, ein -...

  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

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. hex

    hex Lebende Foren Legende

    Dabei seit:
    10.12.2003
    Beiträge:
    1.776
    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. text in mehren files suchen und ersetzen linux

    ,
  2. linux erstes zeichen viele dateien ersetzen

    ,
  3. linux string in mehreren dateien ersetzen

    ,
  4. suchen und ersetzen mehrere Dateien linux,
  5. string in dateinamen ersetzen linux,
  6. linux wort in datei ändern,
  7. in einer datei mehrer stellen aendern linux,
  8. linux mehrere worte löschen sed,
  9. ersetzen von wörtern in mehreren text dokumenten linux,
  10. linux einträge in Datei ersetzen %s,
  11. unix wörter ersetzen,
  12. zeichen in mehreren Dateien austauschen Linux,
  13. shell wort in mehrere dateien ersetzen,
  14. linux text in datei ersetzen,
  15. sed in allen Datein ,
  16. unix sed mehrere ersetzungen,
  17. ubuntu ordner suchen und ersetzen sed,
  18. ubuntu in ordner suchen und ersetzen,
  19. unix sed mehrere dateien,
  20. linux suchen und ersetzen über mehrere dateien,
  21. linux text in dateien ersetzen perl,
  22. unix ersetzen in dateie,
  23. zeichen in vielem dateien ersetzen,
  24. suchen ersetzen in mehreren dateien,
  25. linux prefix von mehreren files ändern
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. perl Hochkommata um Worte im String einfügen?

    perl Hochkommata um Worte im String einfügen?: Hallo, $attributes=' cn dn uid ' wie fasse ich alle Worte in Hochkommata, so dass $attributes=' "cn" "dn" "uid" ' ist? Danke Tom
  4. leerzeichen vor und nach einem STRING löschen

    leerzeichen vor und nach einem STRING löschen: Hallo Zusammen, ich muss in einer Datei die LEERZEICHEN vor und nach einem STRING entfernen, aber nicht innerhalb des Strings. Die STRINGS sind...
  5. Teilstring extrahieren

    Teilstring extrahieren: Hallo zusammen, ich suche nach einer Möglichkeit aus einem String einen Teil auszuschneiden. Gegeben sei z.B. der String: * fcid 0xb400a0 [pwwn...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden