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/'