Linuxデスクトップには、UTF-8ロケールがあります。 KOI8-Rでエンコードされたファイルをgrep(ack)で検索しようとすると失敗します。パターンを手動でKOI8-Rにエンコードし、それを引数として渡すと、機能します。
パターンに使用するエンコーディングをgrepに指示することは可能ですか?または他のツール?
検索するすべてのファイルのエンコーディングが同じ場合:
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(echo 'привет' | iconv -t KOI8-R)" *.txt
またはbashまたはzshで
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(iconv -t KOI8-R <<<'привет')" *.txt
または、目的のエンコーディングで子シェルを起動します。
$ LC_CTYPE=ru_RU.KOI8-R luit
$ ack-grep 'привет' *.txt
$ exit
Luit (XFree86およびX.orgに同梱)は、UTF-8端末を想定して、LC_CTYPE
設定で指定されたロケールでコマンドラインで指定されたプログラムを実行します。そのため、コマンドは目的のロケールで実行され、Luitは端末出力をUTF-8に変換します。
別のアプローチは、異なるエンコーディングのファイルが多数あるディレクトリツリーがある場合、好みのエンコーディングでそのディレクトリツリーのビューをマウントすることです。 fuseflt ファイルシステムがこれを実行できると思います(テストされていません)。
mkdir /utf8-view
fuseflt iconv-koi8r-utf8.conf /some/dir /utf8-view
ack-grep 'привет' /utf8-view/*.txt.utf8
fusermount -u /utf8-view
ここで、構成ファイルiconv-koi8r-utf8.conf
には
ext_in =
ext_out = *.utf8
flt_in =
flt_out = .utf8
flt_cmd = iconv -f KOI8-R -t UTF-8