[solved] echo und Escape-Sequenzen

  • Yohoo!


    Ich brauch mal Hilfe:


    Folgendes ist gegeben: Eine Datei, die u.a. reguläre Ausdrücke enthält. Also z.B. so was wie: bla\.\\.


    Diese Datei muß jetzt durch ein Skript gejagt werden, das einzelene Zeilen ändert (und z.T. verdoppelt), die meisten jedoch unverändert ausgibt. Also so: cat DATEI|script>>DATEI.NEU


    Das Skript selbst hat dazu eine kleine while-Schleife:

    Code
    while read LINE; do
       if [...]
       else
          echo $LINE
       fi
    done

    Pipe ich die Datei jetzt in das Skript, interpretiert echo die backslahes und macht aus bla\.\\. ein bla\.\. :§$%


    Der Parameter -E bringt auch keinen Unterschied.


    Jemand eine Idee, wie man dem echo das abgewöhnen kann?
    Nein, double oder single quotes bringen auch keinen Effekt :(


    Grüße


    Christian

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

    2 Mal editiert, zuletzt von knebb ()

  • Ups, den kannte ich noch nicht. Nach Durchlesen Deines Beitrags dachte ich mir: "Quatsch, das muss doch klappen" und jetzt gucke ich blöd 8o
    Ich habe eine datei mit Inhalt

    Code
    bla\.\\.


    und jetzt kommt's: Die Zeile

    Code
    cat datei |while read L ; do echo $L ; done

    produziert

    Code
    bla.\.

    Die Zeile

    Code
    cat datei |read L ; echo $L

    produziert

    Code
    bla\.\\.


    Es liegt nicht am echo, sondern am while??? Wie kann der while-Befehl Escape-Zeichen interpretieren??? :rolleyes:


    Verwirrt,
    ARK

    VDR
    ASUS A7N8X-X, AMD 2600+, 2 GB, 320 GB HD, Hauppauge DVB-S 1.3, Hauppauge Nova-S-Plus, Funktastatur
    Debian 4.0/Etch-Kernel 2.6.18-5-486
    c't-VDR 6.1 mit e-tobi 1.6.0 (neu gepatched ohne sortrecordings), acpi, vdradmin-am, burn, osdteletext, ffnetdev, audiorecorder, infosatepg, ...
    Client
    dbox2 (Sagem 2xI_C) mit Neutrino-Derivat

  • Probieren wir es doch mal aus:


    Code
    greywolf@matrix:~$ LINE='bla\.\\.'
    greywolf@matrix:~$ echo $LINE
    bla\.\\.
    greywolf@matrix:~$ echo "$LINE"
    bla\.\\.


    Das echo verschluckt die "\" also offenbar gar nicht ... was kommt sonst noch in Frage ...


    Code
    greywolf@matrix:~$ man bash
    [..]
           read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
                  [..] The backslash character (\) may  be  used
                  to  remove any special meaning for the next character read and for line continuation.
    [..]
                  -r     Backslash does not act as an escape character.  The backslash is considered to
                         be part of the line.  In particular, a backslash-newline pair may not be  used
                         as a line continuation.
    [..]


    Hoppala, interessant zu wissen, war mir auch noch nicht bewusst :)

  • Das ist doch Standardverhalten der Shell.


    \ dient dazu das folgende Zeichen von der Interpretation der Shell auszunehmen.


    Das Problem ist das read. Nimm einfach read -r LINE, siehe man read oder bash


    Dann sollte es gehen.


    Uli

  • Zitat

    Original von ufauser
    Das Problem ist das read. Nimm einfach read -r LINE, siehe man read oder bash


    Jau, das war's.


    Manchmal ist es gut, wenn ein paar andere drauf schauen.


    Danke an alle, wieder was gelernt. :)

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!