sed: unexpected token `)'

  • Hallo,
    Irgendwie kriege ich es nicht gebacken .....also man hat folgende Zeile:

    Code
    "TV-DIG-FTA","104","12.480","V","DAS VIERTE","AST01HKU","MPG2","","36","27500","3/4","2047","2048","2047","1793","5","133",""

    die zB. in folgende Zeile umgewandelt werden muss:

    Code
    DAS VIERTE,D VIERTE;BetaDigital:12460:hC34:S19.2E:27500:2047:2048=deu:36:0:1793:133:5:0


    Hier ist mein Versuch:

    Code
    sed "s/^\"(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\","(.*)\"/V\ \1\ \2 \3\ ;\4/" >testfile.txt

    nach dem ausführen kriege leider die Meldung:

    Code
    syntax error near unexpected token `)'


    Kann mir da bitte jemand weiter helfen?


    Danke!

  • Hi,


    hopsi hat Recht, im grunde geht es also etwa so:


    Code
    sed 's/^"\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)"/V\ \1\ \2 \3\ ;\4/' >testfile.txt


    Wie Du allerdings aus der ersten Zeile die zweite erstellen moechtes ist mir etwas schleierhaft da ja in der ersten Zeile einige Informationen fehlen die in der zweiten vorhanden sind.


    cu
    gonz

  • Ich danke euch ;D


    Jetzt habe ich anderes Problem u. zwar die Daten ab 10-te Klammer werden nicht richtig abgespeichert bzw. wenn man

    Code
    sed 's/^"\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)"/ \5:\3:\4\:\6:\10/' >testfile.txt


    eingibt, kriegt das hie am Ende:

    Code
    DAS VIERTE:12.460:H:AST01HKU:TV-DIG-FTA0

    obwohl es eigentlich die SR folgen musste .... kann man das irgendwie lösen?


    Danke!

  • Hallo,


    Ich habe jetzt in mehreren HOWTOs gelesen, dass sed wohl nur 9 Muster merken kann :(


    Kann man das irgendwie anders lösen?
    Danke!


    Zitat

    Wie Du allerdings aus der ersten Zeile die zweite erstellen moechtes ist mir etwas schleierhaft da ja in der ersten Zeile einige Informationen fehlen die in der zweiten vorhanden sind.


    Du meinst sicherlich Quelle :). Das werde vorher mit sed lösen:

    Code
    sed -e 's/AST01HKU/S19.2E/g
  • Da führen viele Wege nach Rom. Für das Vorhaben würde ich grundsätzlich mal den awk nehmen. Bei der Kommandozeile kriegt man ja Augenkrebs ;)


    Code
    awk -F"," '{gsub("\"","",$0);
                gsub("AST01HKU","S19.2E",$0);
                print $5 ":" $3 ":" $6 ":" $1
               }' /path/to/file


    /path/to/file entsprechend ersetzen. Ich denke mal das kleine Skript spricht ungefähr für sich. Da ich ja nicht genau weiß, wie das Ergebnis aussehen soll.


    Prinzipiell wird die ursprüngliche Zeile aufgeteilt, und die einzelnen Werte in die Variablen geschrieben ($1, $2, $3 usw.) Jetzt musst du nur noch die Variablen in der richtigen Reihenfolge ausgeben lassen.


    Greetz

    VDR: PIII 933MHz, 512MB Ram, D1184 FSC A11, TechnoTrend 1.3 + SkyStar 2.d - Base 1.4 / BigPatch - streamdev, vdradmin, mplayer, femon, text2skin, DeepBlue / HDD 160GB + 400GB


    Sometimes, Linux is like an old Text-Adventure... take Module A and use it with Lib B and see what happens..

  • Danke, jetzt sieht es viel besser aus :). Habe aber wieder eine Frage :)))
    Wie soll ich awk sagen, dass es bei $8 immer ein 0 einfügen soll?


    Also in meinem Beispiel oben gibt es leere "" und das soll hinterher so "0" aussehen, wenn da aber irgendwelche Werte stehen, muss trotzdem durch 0 ersetzt werden .....


    Danke!

  • So, ich habs gelöst :)


    Bash
    #!/bin/bash
    
    
    
    
    awk -F"," '{gsub("\"","",$0);
                gsub("AST01HKU","S19.2E",$0);
                gsub("AST02HKU","S19.2E",$0);
                print $5 ":" $3 ":" $4 ":" $6 ":" $10 ":" $12 ":" $13 ":" $9 ":" 0 ":" $15 ":" $17 ":" $16 ":" 0 
               }' > .....


    Wie kann ich awk sagen, dass es in jeder Zeile alle punkte ganz am Anfang (also bevor die Zeilen kenvertiert werden) löschen soll?


    Danke!

  • Das würde ich persönlich wiedrum mit sed lösen. Alles was du brauchst ist die richtige Regex. Hier könnte ^\.* zielführend sein ;)


    also


    cat /path/to/file | sed -e 's/^\.*//g' | awk ......


    Problem . steht normalerweise für ein beliebiges Zeichen, ich hoffe mal das man mit \. den Punkt selbst zu fassen bekommt ;) . Der Stern dahinter müsste dann bedeuten "Punkt-keinmal bis beliebig oft", ^ steht für den Zeilenanfang. Insgesamt also Punkt keinmal bis beliebig oft ersetzen mit nichts wenn es am Zeilenanfang steht.


    So und jetzt haut oder korrigiert mich ;)

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • steffen_b
    Danke für Hilfe ....... habe es jetzt anders gelöst:

    Code
    cat /home/bik/Desktop/testchannelsconf.txt | sed "s/[.]//g"|awk -F"," '{gsub("\"","",$0);
                gsub("AST01HKU","S19.2E",$0);
                gsub("AST02HKU","S19.2E",$0);
                print $5 ":" $3 ":" $4 ":" $6 ":" $10 ":" $12 ":" $13 ":" $9 ":" 0 ":" $15 ":" $17 ":" $16 ":" 0 
               }'

Jetzt mitmachen!

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