Perl in der Shell: 2x Suchen und 1x Ersetzen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von wuffi, 03.12.2010.

  1. #1 wuffi, 03.12.2010
    Zuletzt bearbeitet: 03.12.2010
    wuffi

    wuffi Grünschnabel

    Dabei seit:
    03.12.2010
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    also es geht um folgendes Problem (bin da auch noch ganz neu):

    Ich möchte per Shell ungefähr folgendes Kommando ausführen:

    perl -pi -e 's/Z%e%i%l%e%/S)a)t)z)t)e)i)l)/E.r.s.a.t.z/g' DATEI

    Das funktioniert so aber nicht.
    Ich möchte eine oder mehrere Zeilen suchen die das Wort "Z%e%i%l%e%" beinhalten, in diesen rausgesuchten Zeilen möchte ich das Wort "S)a)t)z)t)e)i)l)" finden und mit dem Wort "E.r.s.a.t.z." ersetzen.

    Wie macht man dies am besten?

    mfg

    edit: Bei den Wörtern im obrigen Script sollen Sonderzeichen ignoriert werden, das macht dann doch dann mit \ oder?

    Bsp: Z\%e\%i\%l\%e\%
     
  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. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Wie wäre es denn statt Perl mit sed?

    Folgendes funktioniert mit GNU sed:
    Code:
    # Nur erstes Vorkommen in jeder (passenden) Zeile ersetzen:
    sed -i '/Z%e%i%l%e%/ s/S)a)t)z)t)e)i)l)/E.r.s.a.t.z./' DATEI
    # Alle Vorkommen in jeder passenden Zeile ersetzen:
    sed -i '/Z%e%i%l%e%/ s/S)a)t)z)t)e)i)l)/E.r.s.a.t.z./g' DATEI
    Das POSIX-sed kennt die Option "-i" nicht; du müsstest dann erst einmal in eine andere Datei schreiben und dann die originale Datei durch die bearbeitete ersetzen (diese Option verändert die Datei direkt).

    Nutzt du eine Linux-Distribution, verwendest du höchstwahrscheinlich GNU sed. :)

    Prinzipiell ja, jedoch enthalten deine Muster keine speziellen Zeichen; höchstens die Klammern könnten als besonders gelten -- jedoch nutzt sed standardmäßig sog. Basic Regular Expressions oder BREs, und da werden unmaskierte Klammern nicht besonders behandelt. Das ist bei Extended Regular Expressions/EREs und bei den von Perl unterstützten regulären Ausdrücken allerdings genau andersherum! Kurz gesagt: Bei Perl müsstest du die Klammern maskieren (also ein \ vorstellen), bei sed standardmäßig nicht.
     
  4. #3 wuffi, 13.12.2010
    Zuletzt bearbeitet: 15.12.2010
    wuffi

    wuffi Grünschnabel

    Dabei seit:
    03.12.2010
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    danke für die Antwort!

    Ich weiß, dass das Ganze auch mit sed geht, aber ich will es ja mit perl versuchen ;-).

    mfg

    edit:

    ok hab jetz doch alles mit sed gemacht :)
     
Thema:

Perl in der Shell: 2x Suchen und 1x Ersetzen

Die Seite wird geladen...

Perl in der Shell: 2x Suchen und 1x Ersetzen - Ähnliche Themen

  1. Was ist besser? Perl, Phyton, Ruby? für Shellscripting, Webscripts, kleine Programme

    Was ist besser? Perl, Phyton, Ruby? für Shellscripting, Webscripts, kleine Programme: Hi. Ich suche die "beste" Programmiersprache. mit der man die meißten Fliegen mit einer Klappe schlagen kann. Die gut ist für Shellscripting,...
  2. shell skript in perl

    shell skript in perl: ser leute ich habe ein shell skript geschrieben das mir server infos ausliest. Das ist alles soweit ok, aber ich würde gerne die returns was ich...
  3. Ausführen eines shell scripts mit perl

    Ausführen eines shell scripts mit perl: hallo, ich möchte am ende eines perl scriptes ein bash script ausführen? Wie funktioniert das?
  4. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  5. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...