Nếu tất cả các tệp bạn đang tìm kiếm có cùng mã hóa:
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(echo 'привет' | iconv -t KOI8-R)" *.txt
hoặc trong bash hoặc zsh
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(iconv -t KOI8-R <<<'привет')" *.txt
Hoặc bắt đầu một shell con trong mã hóa mong muốn:
$ LC_CTYPE=ru_RU.KOI8-R luit
$ ack-grep 'привет' *.txt
$ exit
Luit (được vận chuyển cùng với XFree86 và X.org) chạy chương trình được chỉ định trên dòng lệnh của nó trong miền địa phương được chỉ định bởi LC_CTYPE
cài đặt, giả sử thiết bị đầu cuối UTF-8. Vì vậy, lệnh chạy trong miền địa phương mong muốn và Luit dịch đầu ra đầu cuối của nó thành UTF-8.
Một cách tiếp cận khác, nếu bạn có một cây thư mục có nhiều tệp trong một mã hóa khác nhau, là gắn kết một khung nhìn của cây thư mục đó dưới một mã hóa ưa thích của bạn. Tôi nghĩ rằng hệ thống tập tin fuseflt có thể làm điều này (chưa được kiểm tra).
mkdir /utf8-view
fuseflt iconv-koi8r-utf8.conf /some/dir /utf8-view
ack-grep 'привет' /utf8-view/*.txt.utf8
fusermount -u /utf8-view
nơi tập tin cấu hình iconv-koi8r-utf8.conf
chứa
ext_in =
ext_out = *.utf8
flt_in =
flt_out = .utf8
flt_cmd = iconv -f KOI8-R -t UTF-8