file、awk、および iconv は、tex ファイルのエンコーディングに自動的に適応します。

file、awk、および iconv は、tex ファイルのエンコーディングに自動的に適応します。

file -i *.tex(出力のサブセット)などの混合エンコード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 -irunを使用してファイル/エンコーディングの組み合わせを解析し、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ベースのコマンドを実行します。file -iコマンドを実行せずにコマンドのリストを表示するには、e次のようにsedスクリプトの最後からフラグを削除します。

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

おすすめ記事