sed - An Bestimmte Stellen Kommata setzen

Diskutiere sed - An Bestimmte Stellen Kommata setzen im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallöchen, ich möchte in einem Textfile mit Hilfe von sed an bestimmte Stellen ein Komma setzen. Ich bin soweit, dass ich mit sed...

  1. #1 stuxevara, 02.10.2007
    stuxevara

    stuxevara Grünschnabel

    Dabei seit:
    13.08.2007
    Beiträge:
    7
    Zustimmungen:
    0
    Hallöchen,

    ich möchte in einem Textfile mit Hilfe von sed an bestimmte Stellen ein Komma setzen.

    Ich bin soweit, dass ich mit
    Code:
    sed 's/^\(.\)/\1;/' test.txt
    nach der ersten Stelle ein Komma setze.

    Das klappt, auch wenn nach an der zweiten Stelle ein Komma einfügen möchte, kann ich das ja mit
    Code:
    sed 's/^\(..\)/\1;/' test.txt
    machen.

    Soweit, so gut ... nun möchte ich aber gern die Anzahl der Stellen in einer Zahl angeben, da ich unter anderem auch an der 352. Stelle ein Komma brauche.

    Und genau da hört es bei mir auf. Meine bescheidenen RegEx-Kenntnisse sagen mir, dass ich Spannen mit den geschweiften Klammern angebe.

    Aber das schaffe ich nicht wirklich einzubauen und hoffe auf Eure Hilfe.
     
  2. #2 Gott_in_schwarz, 02.10.2007
    Zuletzt bearbeitet: 02.10.2007
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Da braucht man die Variablen-Substitution der benutzten shell. Da die shell die Variable im gleich folgenden sed-Ausdruck Substituieren soll, darf man keine single-, sondern muss double-quotes (afaik) verwenden:
    Code:
    stelle=4
    echo 'blaaaaa blub'|sed "s/^\(.\{${stelle}\}\)/\1;/"
    edit: außerdem ist das ein Semikolon und kein Komma :/
     
  3. #3 stuxevara, 02.10.2007
    stuxevara

    stuxevara Grünschnabel

    Dabei seit:
    13.08.2007
    Beiträge:
    7
    Zustimmungen:
    0
    Vielen Dank - klappt und verstanden hab ichs auch :)

    Ich erlaube mir noch eine zusätzliche Frage: Kann man mit einem Schwung mehrere Semikola setzen?Also an die Stelle 4,8,50 und 90 zB

    {a,b} würde ja einen Bereich angeben.


    Kriegt man das mit einem Ausdruck hin oder muss ich das dann mit einer Schleife (o.ä.) lösen?

    PS: Natürlich meinte ich Semikolon 8)
     
  4. #4 Gott_in_schwarz, 02.10.2007
    Zuletzt bearbeitet: 02.10.2007
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Naja, du könntes das schon in einen Ausdruck 'prügeln', aber dann wäre die Anzahl der Kommata (oder Semikola) fix und nicht variabel, was du wahrscheinlich willst. Deswegen wäre eine Schleife wohl besser.
    Du kannst auch mehrere sed-Kommandos einfach pipen. Bedenke: wenn du an Stelle 50 ein Komma setzen willst und bereits an Stelle 2 eins gesetzt hast, so must du Stelle 51 nehmen, weil ein Zeichen dazugekommen ist.

    Das mit dem Bereich wird so nicht klappen, weil ein Bereich halt genau _einmal_ matcht, und dann kannst du auch nur einmal ein Komma einfügen. Du kannst natürlich mehrere Bereiche machen etc., aber das hab' ich oben ja schon angerissen.

    Ein Beispiel:
    Code:
    line='hihi und blub'
    for i in 4 9 15
        do
            line=$(echo $line|sed "s/^\(.\{${i}\}\)/\1;/")
        done
    
    echo $line
     
Thema: sed - An Bestimmte Stellen Kommata setzen
Besucher kamen mit folgenden Suchen
  1. sed bestimmtes wort an 3 stelle

Die Seite wird geladen...

sed - An Bestimmte Stellen Kommata setzen - Ähnliche Themen

  1. Dateien mit bestimmten Rechten erstellen

    Dateien mit bestimmten Rechten erstellen: Hallo, ich möchte, dass Dateien und Ordner auf meinem Server mit bestimmten Rechten erstellt werden. Grund: Ich habe mehrere Samba User und...
  2. Logdatei auswerten und neue Logdatei erstellen => Nur bei bestimmtem Wert

    Logdatei auswerten und neue Logdatei erstellen => Nur bei bestimmtem Wert: Hi Leute, ich bin gerade dabei ein Shell-Script zu schreiben um Logdateien auszuwerten und das Ergebnis in eine neue Datei zu schreiben....
  3. Programmfenster nur auf einem bestimmten Monitor zulassen

    Programmfenster nur auf einem bestimmten Monitor zulassen: Hallo, ich hoffe ich habe das hier richtig einsortiert. Mein Problem besteht darin, dass ich an meinem Rechner (Ubuntu 17.04) einen Monitor zum...
  4. [gelöst] - for file in ... nur für bestimmte Endungen?

    [gelöst] - for file in ... nur für bestimmte Endungen?: Hallo Zusammen Ich habe einen eigenen Server und das Ziel mittels einem Shell-Skript ein Verzeichnis auf neue Dateien zu überprüfen. Das Skript...
  5. Bestimmte Zeilen einer Spalte addieren

    Bestimmte Zeilen einer Spalte addieren: Hallo, würde mich über Hilfe in Form eines Unix-Befehls oder AWK bei folgendem Problem freuen: Ich habe eine Textdatei, in der Werte drin sind in...