私のLinuxデスクトップにはUTF-8ロケールがあります。一部のKOI8-Rエンコーディングファイルを取得するためにgrep(ack)を使用しようとすると失敗します。パターンをKOI8-Rで手動でエンコードし、パラメータとして渡すと機能します。
パターンが使用するエンコーディングをgrepに通知できますか?それとも別のツールがありますか?
答え1
検索したいすべてのファイルのエンコードが同じ場合:
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
ルイットLC_CTYPE
(XFree86およびX.orgに付属)UTF-8端末を想定し、設定で指定されたロケールでコマンドラインで指定されたプログラムを実行します。したがって、コマンドは目的のロケールで実行され、Luitは端末出力をUTF-8に変換します。
ディレクトリツリーに異なるエンコーディングのファイルがたくさん含まれている場合、別のアプローチは、好みのエンコーディングでディレクトリツリービューをインストールすることです。私の考えではヒューズファイルシステムはこれを行うことができます(テストされていません)。
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