grep w plikach z innym kodowaniem

0

Jak wyszukać za pomocą grep'a tekst w plikach zapisanych w innym kodowaniu niż domyślne UTF-8? Dla przykładu, mam trochę plików zapisanych w kodowaniu CP-1250, i chcę w nich znaleźć jakieś słowo. Jeśli szukane słowo składa się tylko ze znaków z zestawu ASCII, po wpisaniu polecania:
grep -rlw --include="*.txt" -e "tekst" /katalog_z_plikami
wszystko znajduje się tak, jak powinno.
Gdy szukane słowo zawiera jakąkolwiek polską literę, np:
grep -rlw --include="*.txt" -e "gżegżółka" /katalog_z_plikami
grep już nie potrafi rozpoznać go w innym kodowaniu. Jak to rozwiązać? Ewentualnie, jakiego innego narzędzia użyć?

1

Spróbuj ripgrep - ma wsparcie dla wielu kodowań.

1

Można ewentualnie w pętli wybierać kolejne pliki, przepuszczać przez iconv do grepa. Jakoś tak:

for x in *.txt **/*.txt
do
    iconv -f cp1250 -t utf8 "$x" | grep foo
done

Warto zauważyć, że ** to baszyzm, Jak używasz czego innego, może być leipiej użyć polecenia find.

1

Z racji, że grep może operować na samych bajtach to możesz zrobić:

grep -rlw --include="*.txt" -e $(echo "gżegżółka" | iconv -f UTF8 -t CP1250) /katalog_z_plikami

I powinno zadziałać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1