Ich beiße mir gerade die Zähne an einem wirklich banalen Problem aus, aber ich kann dazu nichts ergoogeln, weil alle nur das Gegenteil davon haben wollen.
Mein Problem:
Ich will eine Textdatei, die Zeilen wie
Introduction/7,Black,notBold,notItalic,closed,TopLeftZoom,101,149,0.0
zeilenweise einlesen, und dann die Zahl hinter dem Slash, im Beispiel also 7, um eins erhöhen (und das ganze wieder ausgeben/in eine Datei schreiben).
Ich hab zuerst am / getrennt, dann an den Kommas, die Zahl ausgelesen, um eins erhöht, passt. Jedoch kann ich nicht (und das ist für mich gerade wirklich bitter....) wieder die Beistriche printen, also meine Ausgabe sieht so aus:
Introduction/8 Black notBold notItalic closed TopLeftZoom 101 149 0.0
Die Beistriche an den richtigen Stellen brauche ich aber, da sie auch im original Programm so sind. Mit find+replace kann ich das nicht sinnvoll nachbearbeiten, weil manchmal statt "introduction" zwei Worte durch ein Leerzeichen getrennt sind.
Mein Code sieht folgendermaßen aus (mal ohne in eine Datei zu schreiben):
#!/bin/bash
while read myline
do
IFS="/"
set -- $myline
output1="$1/"
IFS=","
set -- $2
seite=$[$1+1]
output2="${output1}$seite,$2,$3,$4,$5,$6,$7,$8,$9"
echo $output2
done < $1
Alles anzeigen
Und probiert habe ich es mit unterschiedlichen Hochkommas um die Beistriche, Escape von Beistrichen, was weiß ich. *gedemütigt-von-der-shell-bin*
Btw., ich versuche mit Jpdfbookmarks meiner DA wieder ihren Index zu geben, nachdem ich die Titelseite aus der Fakultät-für-Informatik-Vorlage mit pdftk hinzugefügt habe. Dazu habe ich zuerst die Metadaten des originalpdfs extrahiert, will jetzt jede Seitenangabe um eins erhöhen (eine Titelseite = alles eine Seite weiter hinten), und das ganze dann wieder "dazupappen".
Also wer eine einfachere Lösung für das hat, dem bin ich auch dankbar
EDIT: Na eh klar, sobald man um Hilfe ruft löst man das Problem dann doch irgendwie selbst...die Shell hasst mich
Hier der korrekte Quelltext, schon mit write out some file - Lösung ist, direkt echo zu nehmen, da das mit Kommas keine Probleme hat:
#!/bin/bash
while read myline
do
IFS="/"
set -- $myline
output1="$1/"
IFS=","
set -- $2
seite=$[$1+1]
echo "${output1}$seite,$2,$3,$4,$5,$6,$7,$8,$9" >> output.txt
done < $1
Alles anzeigen