Noch ein SED-Problem

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von jurgen_xf, 28.02.2011.

  1. #1 jurgen_xf, 28.02.2011
    Zuletzt bearbeitet: 28.02.2011
    jurgen_xf

    jurgen_xf Mitglied

    Dabei seit:
    19.10.2010
    Beiträge:
    29
    Zustimmungen:
    0
    Wieder mal ein SED Anfängerproblem........

    Ich bearbeite stündlich mit der ksh eine Textdatei (update.txt) mit folgendem Eintrag:
    Code:
    /inputfile/data/xxx/yyy/update/dateiname_20110128.txt,123,LED,31....
    /inputfile/data/xxx/yyy/update/dateiname_20110127.txt,128,EPF,11....
    ....
    
    Die Länge der Zeile und der dateiname varriiert,- doch vor dem .txt steht immer das Datum,- dies möchte ich kopieren und in den Pfad hinter update einfügen,- und das sollte dann rauskommen:
    Code:
    /inputfile/data/xxx/yyy/update/20110128/dateiname_20110128.txt,123,LED,31....
    /inputfile/data/xxx/yyy/update/20110127/dateiname_20110127.txt,128,EPF,11....
    ....
    
    Weiß jemand eine schnelle Lösung?
    Vielen Dank im Voraus
     
  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. #2 floyd62, 01.03.2011
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Könnte so funktionieren:
    Code:
    sed -e 's|/[^/]*_\([0-9]*\).txt|/\1&|'
    
    Gruss, A.
     
  4. #3 jurgen_xf, 01.03.2011
    jurgen_xf

    jurgen_xf Mitglied

    Dabei seit:
    19.10.2010
    Beiträge:
    29
    Zustimmungen:
    0
    danke... irgendwie gibt die Shell mir aus, daß sie die Einträge nicht findet...mache scheinbar nen grundlegenden Fehler wie ich die zieldatei angebe...
    Code:
    $inputdirectory/input.txt sed -e 's|/[^/]*_\([0-9]*\).txt|/\1&|'
    meldung der shell: /inputfile/data/xxx/yyy/update/dateiname_20110127.txt,128,EPF,11 not found


    Gruss Jurgen
     
  5. #4 floyd62, 01.03.2011
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hoi,

    wenn du das wirklich so aufrufst, wie angegeben, interpretiert die Shell das '$inputdirectory/input.txt' als das auszuführende Programm - und das funktioniert dann natürlich nicht; versuchs doch einfach mal mit
    Code:
    sed -e 's|/[^/]*_\([0-9]*\).txt|/\1&|' <$inputdirectory/input.txt
    
    Gruss, A.
     
  6. #5 jurgen_xf, 01.03.2011
    jurgen_xf

    jurgen_xf Mitglied

    Dabei seit:
    19.10.2010
    Beiträge:
    29
    Zustimmungen:
    0
    getan...die Fehlermeldung "not found" verschwindet aber die Quelldatei bleibt unverändert....irgendwie macht er gar nix
     
  7. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    "Gar nix" sollte nicht sein. Die korrekte Ausgabe sollte Dir auf der Konsole ausgegeben werden (das '<' vor dem Dateinamen kannst Du uebrigens weglassen). 'sed' schreibt standardmaessig auf die Konsole. Wenn Du das Ergebnis speichern willst, musst Du es umleiten:
    Code:
    sed -e 's|/[^/]*_\([0-9]*\).txt|/\1&|' $inputdirectory/input.txt > korrigierteDatei.text
    
    Du kannst _NICHT_ in die gleiche Datei umleiten - sie wuerde von der Shell erst geleert werden, bevor der Inhalt von sed bearbeitet wird.
    Wenn Du die Aenderung in der gleichen Datei gespeichert haben moechtest, musst Du entweder 'korrigierteDatei.text' nach dem Aufruf umbenennen, oder Du benutzt sed mit der Option '-i'. Das funktioniert allerdings nur fuer GNU sed (unter Linux duerfte das der Fall sein):
    Code:
    sed -i -e 's|/[^/]*_\([0-9]*\).txt|/\1&|' $inputdirectory/input.txt
    
     
  8. #7 jurgen_xf, 01.03.2011
    jurgen_xf

    jurgen_xf Mitglied

    Dabei seit:
    19.10.2010
    Beiträge:
    29
    Zustimmungen:
    0
    Irgendwie komme ich mit SED nicht ans Ziel. Der oben beschriebene Ansatz verändert nichts. Die Datei sieht genauso aus wie die Zieldatei. Ich habe einen anderen Lösungsansatz mit Perl bekommen. Damit haut es (fast) hin. Die Ausgabe ist von der Struktur her so wie ich sie haben möchte, nur kommen alle Zeilen doppelt vor.
    Code:
    perl -p -i.old -nle 's/\/(\w+)(\d{8})/\/\2\/\1\2/;print $_;' $inputdirectory/update.txt 
    woran liegt denn das nun schon wieder????
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 floyd62, 02.03.2011
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Lass mal den 'print $_;'-Befehl weg; die Ausgabe erzeugst du ja schon mit der '-p'-Option beim Perl-Aufruf ...

    Was bekommst du mit
    Code:
    perl -p -i.old -e 's/\/(\w+)(\d{8})/\/\2\/\1\2/;' $inputdirectory/update.txt
    
    (also auch ohne die Optionen '-l' und '-n')?

    A.
     
  11. #9 jurgen_xf, 02.03.2011
    jurgen_xf

    jurgen_xf Mitglied

    Dabei seit:
    19.10.2010
    Beiträge:
    29
    Zustimmungen:
    0
    Es funktioniert. Vielen Dank für die Hilfe an alle.
     
Thema:

Noch ein SED-Problem

Die Seite wird geladen...

Noch ein SED-Problem - Ähnliche Themen

  1. Firefox 44 bietet nochmals versteckte Option zum Laden nicht signierter Erweiterungen

    Firefox 44 bietet nochmals versteckte Option zum Laden nicht signierter Erweiterungen: Mozillas jetzt veröffentlichter Browser Firefox 44 verhindert das Laden von nicht signierten Erweiterungen. Entgegen dem ursprünglichen Plan gibt...
  2. Artikel: 24 Jahre jung: Das Beste von Linux kommt noch

    Artikel: 24 Jahre jung: Das Beste von Linux kommt noch: Linux ist nun 24 Jahre alt. Was wir bisher von Linux gesehen haben, ist aber gewissermaßen erst der Anfang. Linux steht noch eine große Zukunft...
  3. Frankreichs Verwaltungen sollen noch aktiver freie Software fördern

    Frankreichs Verwaltungen sollen noch aktiver freie Software fördern: DISIC, die französische interministerielle IT-Direktion, ermuntert die öffentlichen Verwaltungen des Landes, mehr Engagement bei freier Software...
  4. Die meisten Repositorien auf GitHub haben immer noch keine Lizenz

    Die meisten Repositorien auf GitHub haben immer noch keine Lizenz: Die Zahl der Repositorien auf GitHub, die eine klare Lizenz haben, bewegt sich seit Jahren um die 20 Prozent und teilweise deutlich darunter. Der...
  5. Die meisten Repositories auf GitHub haben immer noch keine Lizenz

    Die meisten Repositories auf GitHub haben immer noch keine Lizenz: Die Zahl der Repositories auf GitHub, die eine klare Lizenz haben, bewegt sich seit Jahren um die 20 Prozent und teilweise deutlich darunter. Der...