SED Variable

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tiptel170, 30.03.2015.

  1. #1 tiptel170, 30.03.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Guten Abend,

    ich habe ein Problem mit SED. Es wird die Variable nicht in den Test eingefügt.

    Hier die Anweisung:
    Code:
    sed -e 's/$/ = '"i/$zahl"'/'
    
    Bekomme folgenden Fehler:
    Code:
    sed: -e expression #1, char 15: unknown command: `
    '
    
    Vielleicht kann mir jemand Helfen?

    Gruß tiptel170
     
  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. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    was willst Du denn erreichen bzw. wie sieht's aus und wie soll's hinterher aussehen? Aus dem Ausdruck hier werde ich zumindest nicht schlau...
     
  4. #3 tiptel170, 31.03.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Es soll mir am Ende in einer Textzeile eine Variable von einer anderen Datei eingefügt werden.
     
  5. #4 Spröde, 31.03.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Vier Slashe sind jedenfalls eins zu viel. Escape ein Slash:
    Code:
    sed -e 's/$/ = '"i\/$zahl"'/'
    oder wähle ein anderes Zeichen als Trenner, je nachdem, was Du da vorhast.
     
  6. #5 tiptel170, 31.03.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Hallo Spröde,

    hab gerade den Vorschlag von getestet. Nun bekomme ich diesen Fehler:

    Code:
    sed: -e expression #1, char 12: unterminated `s' command
    
    Gruß tiptel170
     
  7. #6 Gast123, 31.03.2015
    Gast123

    Gast123 Guest

    Zur Ausgangsfrage:
    Die Shell-Variable $zahl wird nicht aufgelößt, da du das Sed-Statement in Hokommata (') und nicht in Gänsefüßchen (") gesetzt hast.
    Code:
    sed -e "s/$/ = i/$zahl/"
    könntest du gemeint haben?
     
  8. #7 tiptel170, 31.03.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Hallo Schard,

    das was du geschrieben hast, habe ich auch schon probiert.
    Bekomme diesen Fehler:

    Code:
    sed: -e expression #1, char 15: unknown command: `
    '
    
    Nun habe ich was ausprobiert:

    Code:
    sed -e 's/$/ = 'i\/$zahl'/'
    
    mit dem Erfolg:
    Code:
    sed: can't read 43: No such file or directory
    
    Die Zahl 43 wurde aus der Variable ausgelesen und auch eingefügt.
    Gruß tiptel170
     
  9. #8 tgruene, 31.03.2015
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Dein Befehl wird erst von der Shell interpretiert, bevor dann an sed weitergegeben wird. Bei bash (und vermutlich den meisten anderen Shells) wird der Inhalt von einfachen Hochkommate (') nicht interpretiert, nur von doppelten ("). Deswegen wird bei Deinem ersten Versuch $zahl nicht durch den Wert ersetzt, den Du mit der Shell gesetzt hast.
    Ausserdem werden Hochkommata als 'von-bis' interpretiert, nicht von aussen nach innen. Daher sieht sed bei Deinem letzten Versuch
    Code:
    sed -e 's/$/ = 'i\/$zahl'/'
    den Befehl
    Code:
    s/$/ =
    uns soll den auf die Daten
    Code:
    i\/$zahl
    anwenden. Was sed mit dem Rest macht, weiss ich nicht, aber bis dahin ist es ja schon einiges Kuddelmuddel. Wenn Du bei dem Vorschlag von Schard das '/' nach dem 'i' noch mit einem escape versiehst, so wie in Deinem letzten Versuch, sollte es klappen.
     
  10. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    mich würde ja immer noch als konkretes Beispiel interessieren, was er denn konkret erreichen will - sprich Input -> Output.

    Solange das nicht gegeben ist raten wir doch eh nur rum und treffen das Gewünschte eher aus Zufall - die textuelle Beschreibung aus #3 ist nämlich alles andere als eindeutig.
     
  11. #10 Spröde, 31.03.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    So sieht es aus.

    Mir scheint, hier will jemand den sed-Befehl insert an der falschen Stelle benutzen.
     
  12. #11 tiptel170, 31.03.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Meine Idee war es mit SED die /etc/isdn/callerid.conf auszulesen und die NUMBER zu dem ALIAS zu zu Ordnen.

    Code:
    [MSN]                                                                                                                                                                                                                                        
     NUMBER    = 40                                                                                                                                                                                                                              
     SI        = 1                   # Info                                                                                                                                                                                                      
     ZONE      = 0                                                                                                                                                                                                                               
     ALIAS     = Info
    
    So sieht es in der Datei aus. Mein Problem ist, es gib viele Sektionen die mit [MSN] anfangen. Daher war mein Gedanke, mittels cat und grep die Datei auszulesen.
    Code:
    cat /etc/isdn/callerid.conf | grep NUMBER | grep -v "#" > /tmp/isdnnr
    cat /etc/isdn/callerid.conf | grep ALIAS | grep -v "#" > /tmp/isdnali
    
    Somit habe ich zwei Dateien. Mittels einer for-Schlaufe wollte ich die Datei isdnnr in die isdnali am Anfang oder am Ende jeder Zeile einfügen. Denn beide Dateien haben immer die gleiche Anzahl von den Zeilen.
    Vielleicht gib es einen anderen Weg?
     
  13. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Nachdem Du nun mal etwas konkreter geworden bist, hier mal ein Vorschlag OHNE sed:

    Code:
    #!/bin/bash
    NUM=$(grep NUMBER callerid.conf | grep -v "#" | cut -d "=" -f2)
    ALI=$(grep ALIAS callerid.conf | grep -v "#" | cut -d "=" -f2)
    echo "ALIAS =$ALI und NUMBER =$NUM"
    ###echo "ALIAS =$ALI und NUMBER =$NUM" > /tmp/isdnali
    
    Ausgabe wäre dann:
    Code:
    ALIAS = Info und NUMBER = 40
    
     
  14. #13 tiptel170, 02.04.2015
    Zuletzt bearbeitet: 02.04.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Danke für Eure Mithilfe und Einsatz!
    Nun habe ich eine Lösung für das Problem gefunden, die will ich auch nicht vorenthalten:
    Code:
    cat /etc/isdn/callerid.conf | grep -v "#" | sed '/SI.*/d' |cut -d "=" -f 2 | sed '/\//d ; /\[/d ; /{/d ; /}/d ; s/^[ \t]*//; /^0.*/d; /^$/d; /^4/i;' | tr '\n' '=' | sed 's/=;=/$/g' | tr '$' '\n' | sed -e 's/;=//g; s/=/_=_/g ; s/ _=_//g; s/_=_/ = /g'
    
    Bessere Version:
    Code:
     cat /etc/isdn/callerid.conf | grep -v "#" | sed '/SI.*/d ; /ZONE.*/d ; /USER.*/d ; /GROUP.*/d' | cut -d "=" -f 2 | sed '/\//d ; /\[/d ; /{/d ; /}/d ; s/^[ \t]*//; s/^$/;/g' | tr '\n' '=' | sed 's/=;/~/g' | tr '~' '\n' | sed '/^$/d ; s/=/ = /g ; s/^ = //g ; /;/g'
    
    Die Ausgabe sollte, dann so aussehen:
    Code:
    40 = Info                                                                                                                                                                                                                                    
    43 = Eltern                                                                                                                                                                                                                             
    49 = Praxis                                                                                                                                                                                                                           
    48 = 3.MSN Fax                                                                                                                                                                                                                        
    45 = InfoDJf4h                                                                                                                                                                                                                               
    42 = InfoPrivat                                                                                                                                                                                                                              
    
    Gruß tiptel170
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Programmer78, 04.04.2015
    Programmer78

    Programmer78 Foren As

    Dabei seit:
    28.11.2007
    Beiträge:
    92
    Zustimmungen:
    1
    mach doch noch ein | grep . | sort dahinter...
     
  17. #15 tiptel170, 04.04.2015
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Was macht " | grep . | sort " noch? Ich habe gesehen, dass mir dann die erste Leerzeile entfernt wird. Diese Leerzeile wollte ich aus der Datei weg haben. Hat mich gestört.

    Gruß tiptel170
     
Thema:

SED Variable

Die Seite wird geladen...

SED Variable - Ähnliche Themen

  1. Linux 4.5 will UEFI-Variablen besser schützen

    Linux 4.5 will UEFI-Variablen besser schützen: Das Löschen bestimmter UEFI-Variablen kann manche Rechner nicht mehr startbar machen. Das kommende Linux 4.5 ergreift Maßnahmen dagegen, die im...
  2. Wie komme ich an den Inhalt des Inhalts einer Variable?

    Wie komme ich an den Inhalt des Inhalts einer Variable?: Hallo Zusammen, ich möchte meine Buildumgebung vereinfachen und besser zu automatisieren. Ein Skript schreibt Pfade in die env und diese...
  3. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  4. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...
  5. Teil einer Variablen auslesen und in neue Variable schreiben

    Teil einer Variablen auslesen und in neue Variable schreiben: Hallo, ist für Euch bestimmt ganz einfach, aber trotz googlen komme ich nicht auf eine Lösung. In Variable x habe ich stehen: xy,ab Nun möchte...