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

E

El Kassem

scan my network and die
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
 
Hallo,

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

mfg
HeadCrash
 
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 ;)
 
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
 
Von der Idee her genau das was ich will. Leider funktioniert das nicht.
Zeichen 9: extra characters after command

Zeichen 9 ist das y.
 
hier geht's auch problemlos. Poste mal Deine komplette Eingabe, 1:1, im Wortlaut, in
Code:
-Tags...
 
SED-Version und Distribution wären evtl auch interessant.
 
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
 
Morgen,

nach t suche und mit d ersetze und einmal nach d suche und durch t ersetze...

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
 
Während mit "-y" die RegEx einmal auf die Zeichenkette/Zeile angewand wird und jeder Buchstabe für sich einzeln ersetzt wird.
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"
 
Morgen

nach der Manpage von sed
y/Zeichenkette1/Zeichenkette2/
vertauscht jedes auftretende Zeichen aus der Zeichenkette1 mit dem entsprechenden Zeichen der Zeichenkette2;
die beiden Zeichenketten müssen gleich lang sein

Wenn du ein Zeichen durch ein ganzes Wort austauschen willst mußt du 's/...' verwenden.

mfg
HeadCrash
 
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)
 
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:

Zeichen 9: extra characters after command
 
Aber oben hat doch der Kollege geschrieben das es beliebig erweiterbar ist... ?

Oder hab das falsch verstanden?
 
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:

vertauscht jedes auftretende Zeichen aus der Zeichenkette1 mit dem entsprechenden Zeichen der Zeichenkette2;
die beiden Zeichenketten müssen gleich lang sein

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".
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht stellst Du mal ein praxisnahes Beispiel oder sogar einen Teil des original Textes hier ein.....

Anhand der echten Daten lässt es sich für Dich leichter erklären und für uns leichter erkennen, was Du genau vorhast....
 
Mittlerweile funktioniert das ersetzen.

Eigentlich eh ganz logisch .. :headup:

Nun ein anderes Problem.

Mein sed-Shellskript sieht nun so aus :
Code:
sed -e 'y/dDtTfFvV/tTdDvVfF/' $1

Als Parameter möchte ich das er die Änderungen in die gleiche Datei auch gleich reinschreibt.

Das heißt wird das Shellskript so aufgerufen :

/sedskript.sh text.txt

Dann sollen die Änderungen an der text.txt durchgeführt werden und die Änderungen auch gleich in der gleichen Datei gespeichert werden.

Ich kann hier keinen fixen Namen vergeben da die Datei immer anders heißt.

Code:
sed -e 'y/dDtTfFvV/tTdDvVfF/' $1 > $1

funktioniert leider nicht :D

Da ist dann meine Text.txt Datei leer.
 
Du bist mein Held, endlich funktioniert alles so wie ich es will.

Danke, an alle die so viel Geduld mit mir hatten :) :D
 

Ähnliche Themen

Mehrzeiligen String mittels sed ersetzen

Letzten Tag löschen

Suchen und Ersetzen mit SED

suchen und ersetzen, Format erhalten

wie Regex für sed escapen?

Zurück
Oben