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ć?
0
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ć.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.