ファイル、awk、iconv は tex ファイルのエンコーディングを自動的に適応させます

ファイル、awk、iconv は tex ファイルのエンコーディングを自動的に適応させます

エンコーディングが混在するTexファイルのセットがあります。例: (出力のサブセット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

すべてを に変換したいのですutf-8が、特に でエンコードされているものは変換したいですiso-8859-1。 (または同様のもの)を使用して手動でこれを行うことができます。

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

awkしかし、私はこれを上記と の組み合わせ、つまり を使用してfile -iファイル/エンコーディングの組み合わせに対してこれを解析しawk、 を使用してそれに応じてエンコーディング変換を実行することでうまく実行できると考えましたiconv

私の知識はawkかなり限られています。これ以上はわかりません。

$ 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

:どなたか助けていただければ幸いです。特に、列からコロンと部分文字列を削除する方法がわかりませんcharset=

答え1

ここでは awk の代わりに sed を使用する方がはるかに良いようです:

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

sed出力に基づいて make するコマンドを実行しますfile -i。実行せずにコマンド リストを確認したい場合は、e次のように sed スクリプトの末尾にあるフラグを削除します。

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

関連情報