Ersetzen mit sed

Dieses Thema im Forum "Anwendungen" wurde erstellt von morbid, 02.03.2007.

  1. morbid

    morbid Grünschnabel

    Dabei seit:
    02.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo zusammen! ich hab da folgendes Problem!

    Ich sollte von einer Datei alle ; mit dem ASCII zeichen \\0036 ersetzen

    dazu benutze ich folgender Befehl:

    sed 's/;/\\0036/g' $fileold > $filenew

    Doch dies fuktioniert nicht da \ ein Sonderzeichen von sed ist! Was kann ich tun?

    Danke und Gruss Adrian
     
  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 x-lette, 02.03.2007
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    Escapen: jedes '\' muß mit einem '\' escaped werden.
    Folgendes sollte also funktionieren:

    sed 's/;/\\\\0036/g' $fileold > $filenew

    Gruß
    XL
    Edit: Thema passt besser nach Programmierung / Shell
     
  4. #3 Wolfgang, 02.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Wenn du das meinst?:
    Code:
    $ echo ';jj;'|sed -e 's/;/\\\\0036/g'
    \\0036jj\\0036
    
    Gruß Wolfgang
    edit zu spät, aber egal
     
  5. morbid

    morbid Grünschnabel

    Dabei seit:
    02.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Danke für die Antworten!!

    Doch wenn ich sed 's/;/\\\\0036/g' $fileold > $filenew mache dann fügt er mit \\0036 ein.

    Beispiel:
    more $oldfile
    Eintrag1;Eintrag2

    more $newfile
    Eintrag1\\0036Eintrag2

    Dies ist jedoch nicht genau das was ich will!:)

    Wenn ich folgenes mache
    print "Eintrag1\\0036Eintrag2" > $newfile

    dann erhalte ich folgendes im $newfile

    more $newfile

    Eintrag1Eintrag2

    Das ASCII Zeichen \\0036 wird nicht angezeig ist aber vorhanden, so sollte es auch sein wenn ich es mit sed mache.

    Ideen?
     
  6. #5 dizzgo, 02.03.2007
    Zuletzt bearbeitet: 02.03.2007
    dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Versuchs mal als Hex-Code... Das sollte klappen:
    Code:
    sed 's/;/\x24/g' $fileold > $filenew
    
    Sofern ASCII 'd36' wirklich 'x24' entspricht ;)

    Grüsse
    d22
     
  7. morbid

    morbid Grünschnabel

    Dabei seit:
    02.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Dies ergiebt den gleichen effekt wie mit dem \\0036.

    Statt Eintrag1\\0036Eintrag2
    ist nun Eintrag1\\0x1eEintrag2
     
  8. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Hm, bei mir klappts:
    Code:
    $ cat oldfile
    Eintrag1;Eintrag2;Eintrag3;
    $ sed 's/;/\x2a/g' oldfile
    Eintrag1*Eintrag2*Eintrag3*
    
    Wobei, hex '2a' entspricht dez '42' und in ASCII ein '*' ist...

    Das ganze geht auch mit dez Werten:
    Code:
    $ cat oldfile
    Eintrag1;Eintrag2;Eintrag3;
    $ sed 's/;/\d42/g' oldfile
    Eintrag1*Eintrag2*Eintrag3*
    
    Was für eine 'sed' Version verwendest du den?

    Gruss
    d22
     
  9. #8 Wolfgang, 02.03.2007
    Zuletzt bearbeitet: 02.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Warum ersetzt du es nicht einfach durch das entsprechende Zeichen?
    \0036 ist oktal 36
    Das entspricht
    dez 30 hex 0x1E Ctrl-^ RS Record separator

    Wenn du das Zeichen direkt ersetzen willst, dann :
    Code:
    sed 's/;/Ctrl + V + Ctr +^/g'  file 
    Wobei du die Steuersequenzen so eingeben musst in dein Ersetzenteil.
    Also nicht Ctrl V schreiben, sondern Ctrl + V gefolgt von Ctrl + ^ eingeben.
    Mit Ctrl + V kannst du alle Steuerzeichen eingeben, ohne dass die Shell es interpretiert.

    Gruß Wolfgang
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 morbid, 02.03.2007
    Zuletzt bearbeitet: 02.03.2007
    morbid

    morbid Grünschnabel

    Dabei seit:
    02.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Danke für eure hilfe! Doch bis jetzt hab ich alles versucht und keine lösung gefunden!

    Was für eine sed Version dass ich habe weiss ich nicht. Kannst dumir sagen wie ich das rausfinden kann?

    Ich lass das ganze mit ksh auf ner SUN Sparc mit Solaris 5.8 laufen, vielleicht hilft dies jemand. Hier ist auch mal mein ganzes script.

    #!/usr/bin/ksh
    date +%Y%m%d%H%M%S | read timestamp

    filename="./inventorys/Netports_TC-HPOV_FULL_"$timestamp".csv"

    sed 's/;/\\0036/g' netports_datarail.txt > $filename

    exit 0

    Vielleicht brauch ich wirklich eine neuere Version von sed!

    Gruss
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    OK i hab ne neie sed Version installiert und nun funktionierts!

    sed 's/;/\x1e/g' netports_datarail.txt > $filename

    Danke euch!!!!
     
  12. #10 Wolfgang, 02.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Meine zweite Version sollte auch bei dir gehen.

    Alternativ, kannst du auch eine Variable setzen.
    Code:
    A=$'\036';
    sed -e "s/;/$A/g"
    
    Oder wenn du hast nimm Perl.
    Code:
    $ echo "ab;cd;ef"|perl -pe 's/;/\036/g'|od -c
    0000000   a   b 036   c   d 036   e   f  \n
    
    Gruß Wolfgang
     
Thema: Ersetzen mit sed
Besucher kamen mit folgenden Suchen
  1. sed hex zeichen ersetzen

    ,
  2. Zeichen 0036

    ,
  3. sed ascii zeichen ersetzen hex

    ,
  4. linux sed oktal werte,
  5. unix awk hex zeichen
Die Seite wird geladen...

Ersetzen mit sed - Ähnliche Themen

  1. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  2. Snappy Personal soll bei Ubuntu langfristig Debians Paketformat ersetzen

    Snappy Personal soll bei Ubuntu langfristig Debians Paketformat ersetzen: Bereits vor mehreren Wochen gab Will Cooke von Canonical bekannt, für Ubuntu 15.10 werde ein Image, basierend auf der Snappy-Core-Technologie,...
  3. Wertebereich ersetzen mit sed

    Wertebereich ersetzen mit sed: Hallo Forenmitglieder, ich habe ein kleines Problem mit sed und zwar möchte ich in einer Datei mit mehren Spalten und Zeilen das Vorkommen eines...
  4. sed suchen und ersetzen mit Variable übergeben?

    sed suchen und ersetzen mit Variable übergeben?: hallo, ich habe folgenden sed-Befehl, der schon super ist und auch alles tut, was er tun soll, nur eben natürlich das $i einfach hinschreibt...
  5. Unterschiedlichen Text in mehrere Dateien finden und löschen / ersetzen

    Unterschiedlichen Text in mehrere Dateien finden und löschen / ersetzen: Moin erstmal, ich suche nach einer Möglichkeit, in mehreren unterschiedlichen Dateien Text mit folgendem Muster zu suchen und zu löschen oder...