• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

regex gesucht bzw korrigieren

Flep

Newbie
Hallo,

ich habe mir letztens ein Skript angelacht, um VMs automatisiert sichern zu können.
Hier gibt es aber eine Zeile, die mir etwas Falsches ausgibt:
Code:
for vm in `find $VM_HOME -type f -name \*.vmx 2>/dev/null |sed 's/ .\// /'`; do

Das gibt dann z.B. /var/container/guests

Als Ausgabe bräuchte ich aber nur /container/guests also ohne vorangestelltes /var.

Wenn mir das jemand korrigieren könnte, wäre ich ihm sehr dankbar.
btw: bei der Erklärung bitte berücksichtigen, dass ich (noch) keine Ahnung von regular expressions habe.

Guden...
Flep
 
A

Anonymous

Gast
Flep schrieb:
Code:
for vm in `find $VM_HOME -type f -name \*.vmx 2>/dev/null |sed 's/ .\// /'`; do
Das gibt dann z.B. /var/container/guests
Als Ausgabe bräuchte ich aber nur /container/guests also ohne vorangestelltes /var.

Das Ganze ist abhängig von dem was in der Variable VM_HOME enthalten ist.
Du kannst an dieser Stelle im Script ein
Code:
echo "$VM_HOME"
mal dazwischenschreiben, um zu sehen was dort drin steht. Wenn deine Maschinen unter /container stehen, dann ist dort wohl schon irgendwas falsches Drin und dann ist zu überlegen ob es nicht besser währe den Inhalt der Variable zu ändern, kommt aber auch darauf an was noch alles mit dieser Variable angestellt wird.

Ansonsten soviele Reguläre Ausdrücke hast du da gar nicht drin, nur ein einziger sed-Befehl
der sucht sucht in den Ausgaben von find nach " ./" (Leerzeichen, Irgendwas, Schrägstrich) und ersetzt das erste Vorkommen davon, durch ein Leerzeichen.
Das kann in dieser Befehlskette theoretisch nur bei ungewöhlichen Filenamen für Verzeichnisse bzw, bei irgendwas recht "komischem" in VM_HOME auftreten. zB Verzeichnisse wie diese hier "/Verzeichnis 5/neues_Verzeichnis/...." Was dieser Sed-Befehl also dort soll ?????????


Wenn es dir nur darum gehen würde ein "/var" am Anfang von dem Ausgaben noch zusätzlich abzuschneiden. Kannst du das hier verwenden, solange es eben immer dieses /var ist, was stört.
Code:
for vm in `find $VM_HOME -type f -name \*.vmx 2>/dev/null |sed 's/ .\// /' | sed 's/\/var//' `; do

robi
 
OP
F

Flep

Newbie
Vielen Dank für die Antwort.

Leider kommt ständig was dazwischen, aber ich bin schonmal soweit, dass es leider nicht geholfen hat.
Das Script muss an anderer Stelle fehlerhaft sein. Leider hilft auch nicht das Logfile von VMware weiter.
Ich bin dran...
Wie kann ich denn die Ausgabe des Scripts debuggen? In einer Batch kann man ja pause benutzen, geht hier aber nicht.

Flep
 
A

Anonymous

Gast
Flep schrieb:
Das Script muss an anderer Stelle fehlerhaft sein. Leider hilft auch nicht das Logfile von VMware weiter.
das das Script irgendwo fehlerhaft ist, hatte ich schon an dieser obrigen Zeile vermutet, es ist und war aber überhaupt daraus nicht ersichtlich was es in der Schleife mit der Variabel vm anfängt. Jedenfalls wenn er es für Dateinamen benutzen sollte, ist es klar das überhaupt nicht funktionert, wenn man nach find noch am Dateinamen herumspielt.
Wie kann ich denn die Ausgabe des Scripts debuggen? In einer Batch kann man ja pause benutzen, geht hier aber nicht.
na, Pause gibts nun nicht gerade, aber dafür gibt's zB sleep, echo, exit, # usw was man zum debugen einsetzt. Weiterhin gibt es Optionen der Shell mit denen man angezeigt bekommt was die Shell jetzt genau einließt und was daraus wird nachdem sie die Substitutionen alle gemacht hat, oder was sie dann letztlich für Befehle wirklich ausführt. Schau mal in die Manpage von Bash zB -x -v -n -D und noch einiges andere sind beim Debuggen eines Scriptes hilfreich.

Wenn du gar nicht weiter kommst, dann darfst du auch gerne das Script oder die problematischen Passagen (aber bitte dann soweit komplett das man von der Initialisierung betroffener Variablen bis zum kompletten Scheifenkörper auch das wesentliche nachvollziehen kann) mal preisgeben. Anders können wir dir wohl nicht helfen logische Fehler zu finden.

robi
 
Oben