Hallo! Ich versuche mich als ziemlicher bash-Neuling an einem Skript, welches bis auf eine Kleinigkeit schon das macht, was es soll. Und zwar will ich, dass aus XML-Dateien der in der dritten Zeile angegebene absolute Pfad geändert wird.
Beispieldatei (Anfang)
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <UFRaw Version='7'> <InputFilename>/home/benutzer/Bilder/fotos/01-Sessions/01/Originale/P1090436.RAW</InputFilename> <OutputFilename>... |
Das Skript sieht so aus
1 2 3 4 5 6 7 8 9 10 11 12 | for i in *.ufraw do ZEILE3=$(head -n3 "$i" | tail -1l) echo " alter Pfad:" $ZEILE3 LAENGE=$(head -n3 "$i" | tail -1l | wc -m) NAME=$(echo $ZEILE3 | cut -c $(( ($LAENGE-29)))-$(( ($LAENGE-22) )) ) echo " RAW-File: " $NAME sed -i "3i\ <InputFilename>$NAME.RAW</InputFilename>" "$i" ZEILE3=$(head -n3 "$i" | tail -1l) echo " neuer Pfad:" $ZEILE3 done |
Heraus kommt
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <UFRaw Version='7'> <InputFilename>P1090436.RAW</InputFilename> <OutputFilename>... |
soweit so gut. Allerdings haben nicht alle files das Leerzeichen am Beginn der 3. Zeile, was dazu führt, dass das Skript in diesen Fällen
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <UFRaw Version='7'> <InputFilename>/P109043.RAW</InputFilename> <OutputFilename>... |
ausgibt.
Im Grunde benötige ich daher einen Befehl, der mir das Leerzeichen am Anfang der dritten (zur Not auch jeder weiteren) Zeile löscht.
Gefunden habe ich
1 | #sed -n s/^[[:space:]]*// "$i"
|
allerdings bewirkt das genau gar nichts.
Hat jemand eine Idee, was ich ändern muss? Ich weiss, dass das mit sed nicht ganz sauber und eigentlich sowas wie xmlstarlet besser ist, aber da hab ich mich überhaupt nicht reingefunden.
Achso, und über einen Hinweis, wie ich das fertige Skript rekursiv durch alle Unterverzeichnisse laufen lassen kann wäre ich auch dankbar!
Bearbeitet von rklm:
Syntaxhighlighting. Bitte nutze die Möglichkeiten von Forum/Syntax - das macht es für die anderen lesbarer.