Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Nachhilfe in regex

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
der_micbur
Gast





BeitragVerfasst am: 10. Jun 2005 10:50   Titel: Nachhilfe in regex

Hallo,

ich brauche eine kurze Nachhilfe in regulären Ausdrück und hoffe, jemand kann mir das mal schnell sagen.
Ich möchte, dass eine Zeichenkette für späteren Gebrauch gemerkt wird.

Konkret:
suche alles bis zum {name}log und benenne um in {name}{date}.log

Also es gibt Dateien, die heißen alle unterschiedlich, haben alle aber hinten 'log' im Namen. Nun soll der String bis 'log' gemerkt werden, und das aktuelle Datum eingefügt werden.
mv {name}log {name}`date +%Y-%m-%d`.log

Ciao, micbur
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 10. Jun 2005 11:26   Titel:

Das hier sollte funktionieren:

Code:
date = $(date +%Y-%m-%d)

for file in $(find . -type f -iname *.log); do
  name = $( echo $file | awk ' { sub(".log", "") } ' )
  mv $file "$name""$date".log
done


Problem dabei ist, das bei awk sub() nur die das erste gefundene .log ersetzt. gsub() würde alle ersetzen, aber nichtsdestotrotz würden dadurch ".log"s ersetzt, die mitten im Dateinamen vorkommen. Des weiteren bin ich mir nicht sicher, wie dieses Skript auf Dateien mit Leerzeichen reagieren würde.
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 10. Jun 2005 15:12   Titel:

@lateralus: Da ist schon von der Syntax her eine kleine Verbesserung notwendig. Wenn um das "=" beim Setzen einer Variablen Blanks stehen, erkennt die Shell hier nicht mehr das Setzen einer Variablen, sondern den Aufruf eines Programms mit Namen der Variablen und "=" ale erstem Argument...
Code:
date=$(date +%Y-%m-%d)

for file in $(find . -type f -iname *.log); do
  name=$( echo $file | awk ' { sub(".log", "") } ' )
  mv $file "$name""$date".log
done
Außerdem kann man dafür auch mit shelleigenen Mitteln auskommen (bis auf das mv):
Code:
#!/bin/bash

date=$(date +%Y-%m-%d)

for file in $(find . -type f -name *.log); do
  newname="${file%.log}${date}.log"
  mv "$file" "$newname"
done
${file%.log} entspricht dem Inhalt der Variablen file weniger dem Part, der am Ende des Inhalts auf das Muster nach dem % passt, trennt also effektiv das .log ab. Damit bleibt der reine Name übrig, an den dann Datum und ".log" angehängt werden. So spart man sich pro Datei einen awk-Prozess.

Näheres zu ${%}, ${%%}, ${#} und ${##} findet man in der bash-Manualpage unter "Parameter Expansion".

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 10. Jun 2005 15:58   Titel:

@Jochen
Vielen Dank. Ich dachte mir schon, dass das einfacher geht, es fehlte nur das wie...
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy