file, awk und iconv zur automatischen Anpassung der Tex-Dateikodierung

file, awk und iconv zur automatischen Anpassung der Tex-Dateikodierung

Ich habe eine Reihe von Tex-Dateien mit gemischten Kodierungen, zB (Teilmenge der Ausgabe von file -i *.tex)

f1.tex: text/plain; charset=utf-8
f2.tex: text/plain; charset=utf-8
f3.tex: text/x-tex; charset=us-ascii
f4.tex: text/plain; charset=iso-8859-1
f5.tex: text/plain; charset=us-ascii

Ich möchte sie alle in konvertieren utf-8, insbesondere die codierten iso-8859-1. Ich kann dies manuell tun mit (oder ähnlich)

iconv -f ISO-8859-1 -t UTF-8 f4.tex > tmp && mv tmp f4.tex

Ich dachte jedoch, dass dies durchaus möglich wäre, wenn man es awkmit dem oben genannten kombiniert, d. h. indem man file -idie Analyse für Datei-/Kodierungskombinationen mit ausführt awkund die Kodierungskonvertierung entsprechend mit durchführt iconv.

Meine Kenntnisse awksind eher begrenzt. Ich bin nicht weiter gekommen als bis hierhin:

$ file -i *.tex | awk '{print $1, $3}'
f1.tex: charset=utf-8
f2.tex: charset=utf-8
f3.tex: charset=us-ascii
f4.tex: charset=iso-8859-1
f5.tex: charset=us-ascii

Ich bin für jede Hilfe dankbar! Insbesondere weiß ich nicht, wie ich den Doppelpunkt :und die charset=Teilzeichenfolgen aus den Spalten entfernen kann.

Antwort1

Hier scheint es viel besser zu sein, sed anstelle von awk zu verwenden:

file -i *tex | sed \ 
's/^\([^:]*\): .*set=\(.*\)/iconv -f \2 -t UTF-8 \1 > tmp \&\& mv tmp \1/e'

Es führt Befehle aus, die sedauf der Ausgabe basieren file -i. Wenn Sie die Befehlsliste ansehen möchten, ohne sie auszuführen, entfernen Sie einfach edas Flag am Ende des Sed-Skripts wie folgt:

file -i *tex | sed \
's/^\([^:]*\): .*set=\(.*\)/iconv -f \2 -t UTF-8 \1 > tmp \&\& mv tmp \1/'

verwandte Informationen