sed: -e Ausdruck #1, Zeichen 6: unknown option to `s'

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von El Kassem, 26.04.2010.

  1. #1 El Kassem, 26.04.2010
    El Kassem

    El Kassem scan my network and die

    Dabei seit:
    23.01.2008
    Beiträge:
    74
    Zustimmungen:
    0
    Hallo Forenmitglieder!

    Ich möchte etwas ganz einfaches machen. Eigentlich...

    Ich möchte mit sed t durch d ersetzen. Das ganze sieht so aus :
    sed -e 's/t/d/g/'

    ich hab schon gegoogelt, fand aber nur Beispiele wo in den Wörter die gesucht oder ersetzt werden sonderzeichen vorhanden waren, das ist ja bei mir nicht der Fall.

    Hat jemand eine Idee ? (Anschließend möchte ich gleich folgende Frage stellen, ich möchte das die Änderungen gleich in die gleiche datei geschrieben werden und aber das skript mit dem parameter aufgerufen wird wo die veränderte datei liegt, wäre dann die korrekte Abfrage so : sed -e 's/t/d/g/' -i $1 $1 ?) <- mal davon abgesehen das ich meine Abfrage damit sie funktioniert noch abändern muss ;)


    Ich danke schon mal im Vorraus.

    MfG
     
  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 HeadCrash, 26.04.2010
    HeadCrash

    HeadCrash Routinier

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

    lass mal den "/" nach dem "g" weg.

    mfg
    HeadCrash
     
  4. #3 El Kassem, 27.04.2010
    El Kassem

    El Kassem scan my network and die

    Dabei seit:
    23.01.2008
    Beiträge:
    74
    Zustimmungen:
    0
    Okay. Soweit so gut ;) Danke ;)

    Aber, ich möchte ja mehre ersetzen und alle Änderungen in eine Datei schreiben.

    Die Befehle einfach kopieren, funktioniert logischerweiße nicht, da er dann nur die letzten Änderungen auch in die Datei schreibt.

    Wie kann ich z.B. also machen das ich :

    nach t suche und mit d ersetze und einmal nach d suche und durch t ersetze... ? Und BEIDE (optional mehr) Änderungen in die Datei schreibe so wie sie heißt?

    Ich krieg das nicht hin..

    Danke ;)
     
  5. #4 HeadCrash, 27.04.2010
    HeadCrash

    HeadCrash Routinier

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

    versuchs mal so:

    Code:
    $ echo "gaga" | sed -e 'y/ag/gd/'
    dgdg
    
    Tauscht 'a' gegen 'g' ung 'g' gegen 'd' ist. Ist beliebig erweiterbar.

    mfg
    HeadCrash
     
  6. #5 El Kassem, 27.04.2010
    El Kassem

    El Kassem scan my network and die

    Dabei seit:
    23.01.2008
    Beiträge:
    74
    Zustimmungen:
    0
    Von der Idee her genau das was ich will. Leider funktioniert das nicht.
    Zeichen 9: extra characters after command

    Zeichen 9 ist das y.
     
  7. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    hier geht's auch problemlos. Poste mal Deine komplette Eingabe, 1:1, im Wortlaut, in
    Code:
    -Tags...
     
  8. #7 HeadCrash, 27.04.2010
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    SED-Version und Distribution wären evtl auch interessant.
     
  9. HBtux

    HBtux Linuxer

    Dabei seit:
    13.04.2010
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    $HOME
    Du kannst auch eine sed-Datei anlegen und dort Deine ganzen Suchstrings eintragen....

    suchstrings.sed
    Code:
    s/t/d/g
    s/a/b/g
    s/x/y/g
    s/GesuchtesWort/DurchDasErsetzen/g
    
    Und nun rufts Du sed wie folgt auf....
    Code:
    sed -e suchstrings.sed $1 > /tmp/temp-file
    cat /tmp/temp-file > $1
    rm -f /tmp/temp-file
    
     
  10. #9 HeadCrash, 28.04.2010
    HeadCrash

    HeadCrash Routinier

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

    das gibt so aber Probleme, da jede RegEx auf die komplette Zeile angewand wird. Jetzt zwar mit "g" und "a" aber das sieht auch mit t -> d und d -> t nicht anders aus.
    Code:
    $ cat suchstrings.sed
    s/a/g/g
    s/g/a/g
    $ echo "gaga" | sed -f suchstrings.sed
    aaaa
    
    Während mit "-y" die RegEx einmal auf die Zeichenkette/Zeile angewand wird und jeder Buchstabe für sich einzeln ersetzt wird.

    mfg
    HeadCrash
     
  11. HBtux

    HBtux Linuxer

    Dabei seit:
    13.04.2010
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    $HOME
    OK. Habe begriffen....
    Funktioniert bei mir auch, so wie Du es beschrieben hast.....

    Aber noch folgende Fragen..... (nur rein informativ)
    Gibt es für Deinen Vorschlag mit "sed -e 'y/....." auch eine Möglichkeit, wenn nicht nur einzelne Zeichen, sondern auch ganze Wörter ersetzt werden sollen. (es war zwar in diesem Thread nicht gefordert, aber.....)

    Bei mir funktioniert es - egal ob einzelne Zeichen oder ganze Wörter....
    (wichtig ist nur die Reihenfolge innerhalb der .sed-Datei muss beachtet werden....)
    Code:
    HBtux:/tmp/test # [B]cat test1.sed[/B]
    s/t/T/g
    s/e/E/g
    s/s/S/g
    s/hallo/- Hallo Welt -/g
    s/1/eins/g
    s/2/zwei/g
    s/3/drei/g
    s/4/vier/g
    s/5/fünf/g
    
    HBtux:/tmp/test # [B]echo "12 hallo 4
    6 5 3 test1"  | sed -f test1.sed[/B]
    [COLOR="Red"]einszwei - Hallo Welt - vier
    6 fünf drei TESTeins[/COLOR]
    


    Code:
    HBtux:/tmp/test # [B]sed --ver[/B]
    GNU sed version 4.1.2
    
    HBtux:/tmp/test # cat /etc/SuSE-release
    SuSE Linux 9.2 (i586)
    VERSION = 9.2
    
    OK - ich weiß. Die SuSE-Version ist alt....
    Da läuft aber meine Heizungssteuerung drauf....
    "never touch a running system"
     
  12. #11 HeadCrash, 29.04.2010
    HeadCrash

    HeadCrash Routinier

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

    nach der Manpage von sed
    Wenn du ein Zeichen durch ein ganzes Wort austauschen willst mußt du 's/...' verwenden.

    mfg
    HeadCrash
     
  13. #12 El Kassem, 30.04.2010
    El Kassem

    El Kassem scan my network and die

    Dabei seit:
    23.01.2008
    Beiträge:
    74
    Zustimmungen:
    0
    Meine sed abfrage sieht so aus:
    Code:
    sed -e 'y/dt/td/fv/vf/' $1
    Version hab ich:
    Code:
    GNU sed Version 4.1.5
    Distribution :
    Code:
    RHEL (2.6.18-194.el5)
     
  14. Gast1

    Gast1 Guest

    Code:
    y/[B]Zeichenkette1/Zeichenkette2[/B]/
    vs.

    Code:
    sed -e 'y/[B]dt/td/fv/vf[/B]/' $1
    Fällt Dir was auf?

    Die Fehlermeldung sagt es sogar ganz deutlich:

     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 El Kassem, 30.04.2010
    El Kassem

    El Kassem scan my network and die

    Dabei seit:
    23.01.2008
    Beiträge:
    74
    Zustimmungen:
    0
    Aber oben hat doch der Kollege geschrieben das es beliebig erweiterbar ist... ?

    Oder hab das falsch verstanden?
     
  17. #15 Gast1, 30.04.2010
    Zuletzt von einem Moderator bearbeitet: 30.04.2010
    Gast1

    Gast1 Guest

    Ja, aber nicht so.

    http://www.grymoire.com/Unix/Sed.html#uh-13

    So zum Bleistift.

    //Edit:

    Das macht aber bei y nicht wirklich Sinn, da sollte man es so "erweitern", wie die Manpage es auch sagt.

    Noch mal zum Mitschreiben:

    Kombinieren kann man das dann so, wenn man z.B. zusätzlich ein(e) bestimmte(s) Zeichenkette gegen eine andere austauschen will, da aber mit den schon genannten Beschränkungen.

    Code:
    echo dädüdädä Fogel-Fau | sed -e 'y/dFä/tVa/' -e 's/ü/ue/g'
    tatuetata Vogel-Vau
    Und schon wird aus dem sächselnden Legastheniker "Deutsch ohne Umlaute", man beachte die unterschiedliche Behandlung von ä und ü, das eine korrigiert einen Fehler, das andere "übersetzt" in die Umschreibung "ü" = "ue".
     
Thema: sed: -e Ausdruck #1, Zeichen 6: unknown option to `s'
Besucher kamen mit folgenden Suchen
  1. sed unb

Die Seite wird geladen...

sed: -e Ausdruck #1, Zeichen 6: unknown option to `s' - Ähnliche Themen

  1. eingehende Emails direkt ausdrucken....EXIM?

    eingehende Emails direkt ausdrucken....EXIM?: Hallo Gemeinde, ich muss eingehende Bestellungen per Email täglich abfangen und einsortieren - wichtig ist dabei das diese Emails bestätigt...
  2. nur mehrfach vorkommende ausdrucke ausgeben

    nur mehrfach vorkommende ausdrucke ausgeben: Hallo, habe eine datei "test" das aus 2 Spalten besteht getrennt mit ">". Wie gebe ich nur die Zeilen aus bei dennen die erste Spalte (also...
  3. awk Variable als regulären Ausdruck brauchen

    awk Variable als regulären Ausdruck brauchen: Ich will in awk eine Variable als regulären Ausdruck brauchen. Das hat eigentlich soweit auch geklappt, nur wenn ich einen String mit einem...
  4. Ältestes Textfile aus einem Verzeichnis ausdrucken.

    Ältestes Textfile aus einem Verzeichnis ausdrucken.: ls *.txt -1t|tail -1 Dieser Befehl druckt mir das älteste *.txt-File aus dem aktuellen Verzeichnis aus (1=Spalte, t=sortiert nach Zeit und tail...
  5. Sed, suche nach ausdruck und füge an

    Sed, suche nach ausdruck und füge an: Hallo zusammen, frage: Ich würde gernd mit sed nach soetwas suchen "index.phpid99"Und danach soll es so aussehen...