Awk
文件、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=
似乎在這裡使用 sed 代替 awk 要好得多:
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/'