Exxter hat geschrieben: 30.04.2020 10:46:12
Ich habe eine Textdatei mit vielen Sonderzeichen erstellt und filter diese:
Code: Alles auswählen
root@cloud:/tmp/muelltest$ cat test.txt | printf %s "${1:-}" | LC_ALL=C tr -cs "a-zA-Z0-9_" "-" | sed -e 's/^-// ; s/-$//'
root@cloud:/tmp/muelltest$
Da kommt aber nichts durch?
Das liegt daran, dass das `printf' hier nicht hingehoert.
Das `cat' gibt den Inhalt von `test.txt' auf stdout aus, das wandert into `printf', das stdin aber gar nicht liest, sondern nur das erste Argument des Scripts ausgibt. Du musst das `cat' *statt* dem `printf' in die Pipeline setzen.
Ich möchte den Filter in folgendes Script in der kommentar-Zeile einbauen
Es wird uebersichtlicher wenn du dafuer eine Funktion verwendest. Etwa so:
Code: Alles auswählen
simplifystring() {
tr ... | sed ... # hier die Befehlszeile die den Input umbaut, *ohne* printf/echo/cat davor
}
...
for f in $dateien
do
kommentar="$(exiftool ... | simplifystring)"
...
(Eine Shellfunktion verhaelt sich wie ein Shellscript oder ein sonstiger Befehl.)
(hier noch mit der bisherigen Lösung die nicht ausreichend ist):
Code: Alles auswählen
dateien=$(find . -iname '*.jpg' -size +3k -type f | sed 's/.\///')
for f in $dateien
do
kommentar=$(exiftool -v $f | grep Comment | sed -e "s/ | | 18) UserComment = GCM_TAG//" | tr -d [:blank:] | tr -d [:space:] | tr -d [:cntrl:] | tr -d [:graph:] | sed -z 's/[^0-9a-zA-Z\_\-]*//g')
seriennummer=$(echo "$kommentar" | grep -o '[0-9]*')
abteilungundserial=$(echo "$kommentar" | sed -e "s/$seriennummer//")
abteilung=$(echo "$abteilungundserial" | sed -e "s/SERIAL//I")
datum=$(exiftool -v $f | grep DateTimeOriginal | sed -e "s/ | | 5) DateTimeOriginal = //")
datumformat=$(echo "$datum" | sed -e 's/:/-/g' -e 's/ /-/g')
dateiname=$(echo "$serial"-"$seriennummer"-"$abteilung"-"$datumformat")
done
Wo kommt denn das `-z' bei sed her? Was macht das ueberhaupt? (NULL-terminierten Input verarbeiten?!) Ich sehe nicht wozu das noetig waere, moeglicherweise ist das ein Problem.
... wobei `tr -d [:graph:]' natuerlich auch alle grafischen, also druckbaren Zeichen entfernt.
Soviel mal an schneller Analyse. Versuche das aufzugreifen, dann poste gerne wieder.