[fast gelöst - UTF8??] Zeichenkette splitten und zeilenweise in Datei ausgeben

  • Hallo,


    ich muss eine Zeichenkette anhand eines bestimmten Trennzeichens in mehrere Zeilen aufsplitten und diese in eine Datei ausgeben.


    Ich habe mir schon awk angesehen und mit einer Eingabedatei funktioniert es auch, nur nicht mit nem einzelnen String.


    Wie muss ich dafür vorgehen? Am liebsten wäre mir sowas wie

    Code
    echo zeilemittrennzeichen | awk -Ftrennzeichen '{ print ?? }' > /pfad/zur/datei


    Danke

    Gruss Björn.


    SilverGreen-Skin

    3 Mal editiert, zuletzt von Björn ()

  • echo 1-2-3-4-5|cut -d"-" -f x gibt dir dann für "-f 1 = 1" "-f 2 = 2" usw!


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • Hmm,


    dabei muss ich doch aber den Teil angeben, den ich ausgeben will.


    Ich weiss doch aber nicht, aus wie vielen Teilen meine Zeichenkette besteht.
    Und ich muss alle Teile in jeweils einer Zeile speichern.


    Beispiel:
    Meine Zeichenkette ist "zeile1#zeile2#zeile3"
    Daraus will ich eine Datei mit
    zeile1
    zeile2
    zeile3


    machen.

    Gruss Björn.


    SilverGreen-Skin

  • Meinst Du sowas:

    Code
    echo "zeile1#zeile2#zeile3" | awk -F"#" '{for (i=1;i<=NF;i++)print $i}'

    oder

    Code
    echo "zeile1#zeile2#zeile3" | sed -e's/#/\n/g'


    Gruß,
    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

    Einmal editiert, zuletzt von ark ()

  • X=1
    while [$X -le "100"]; do
    DEINEZEILE="`echo 1#2#3#4#5#|cut -d "#" -f $X`"
    if [-n $DEINEZEILE]; then
    echo $DEINEZEILE>deinedatei.txt
    else
    break
    if
    done


    Habe es nicht ausprobiert, aber damit kannstz du beliebig viele Eemente nehmen (hier 100) und sobald kein Element mehr da ist, bricht er ab! Dadurch kannst du beliebig viele Elemente voraussetzen!


    Haben den Code nicht getstet, aber etwa so sollte es gehen!


    Gruß


    Toxic


    [EDIT]
    Das ist natürlich eleganter! Ich bin halt freund von Schleifen! ;)
    [/EDIT]

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

    Einmal editiert, zuletzt von Toxic-Tonic ()

  • Ist zwar schon eine Weile her, aber nun muss ich es mal wieder nutzen und habe da ein Problem mit Sonderzeichen in meinem Ausgangstext, der in die Datei geschrieben werden soll.


    Wie kann ich denn Probleme mit etwaigen Sonderzeichen umgehen?
    Ich nutze übrigens derzeit folgenden Code:

    Bash
    #!/bin/sh
    
    
    echo $1 | awk -F"#" '{ for (i=1;i<=NF;i++) print $i}' >> $2
    
    
    exit 0


    Das Problem ist auch, dass die Zeichenkette im utf-8 Format ist, bulgarische Zeichen unter anderem und diese bringen das Script etwas aus dem Takt.


    Danke.

    Gruss Björn.


    SilverGreen-Skin

    Einmal editiert, zuletzt von Björn ()

  • Eigentlich sollte es auch mit UTF-8 funktionieren. Eine der genialen Vorteile von UTF-8 ist, dass einfaches Pattern-Matching weiterhin byteweise durchgeführt werden kann, ohne dass es versehentliche Treffer innerhalb von Multibyte-Zeichen geben kann. Natürlich muss der Suchstring ebenfalls UTF-8 kodiert sein, und es darf kein Pseudo-UTF-8 (benutzen von 128-191 als 1-byte Zeichen) sein.


    Gruß,


    Udo

  • Hallo Udo,


    hmm, irgendwie werde ich aus deiner Antwort nicht so recht schlau.


    Mein Problem ist, dass die in utf-8 vorliegenden bulgarischen Zeichen in meiner Anwendung nicht als utf-8 behandelt werden. (Daran kann ich aber nichts ändern!) Daher werden diese nicht korrekt an mein Script übergeben, sondern kommen als ...-.. an. Dies führt dann dazu, dass das Script die Datei nicht wie gewünscht erstellt, sondern unter einem völlig willkürlichen Namen und im Verzeichnis, aus dem ich den Aufruf gestartet habe.


    Mir geht es also darum, was ich tun kann, damit die Zeichen ...--..- das Script nicht aus dem Tritt bringen.

    Gruss Björn.


    SilverGreen-Skin

  • Ich gebe zu, ich verstehe nicht genau, wo du hängst. Programme, die UTF-8 nicht kennen, sehen einfach statt einem Zeichen zwei oder drei. Da es sich dabei um Zeichen aus dem oberen ASCII-Bereich 128..255 handelt, werden sie von den meisten Programmen einfach als Sonderzeichen behandelt.


    Wenn statt der bulgarischen Zeichen wirklich .... ankommt, dann hat irgendwer versucht, UTF-8 in ASCII zu konvertieren, und alle unbekannten Zeichen wurden durch Punkte ersetzt. Dann ist es natürlich zu spät.


    Gruß,


    Udo

Jetzt mitmachen!

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