
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 -i
runを使用してファイル/エンコーディングの組み合わせを解析し、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/'