Автор Гілка: grep здурів  (Прочитано 2449 раз)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
grep здурів
« : 2011-03-14 20:06:36 »
GNU grep 2.6.3 на мертво відмовляється шукати вирази зі зміненим кодуванням. Як його від цього відучити? Дось дуже тут попахує якимось дебіанівським збоченням, коли програмам врізають функціональність. Як не парадоксально: кирилицю в унукоді бачить, а от конвертований в cp1251  щаблон ніяк не бачить.

Приклад живого скрипту, який працює під Червонобрилем і втрачає свою функціональність під Деб Сквізі
~$ cat `which wgrep`
#!/bin/bash
ARG="$1"
ARGC="$(echo $ARG | sed -e 's/\\\^/./;s/\^//')"
CARG="$(echo "$ARG" | iconv -t cp1251)"
shift
grep -Hn "$CARG" "$@" | iconv -f cp1251 | grep --color "$ARGC" -C100
« Змінено: 2011-03-14 20:40:14 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: grep здурів
« Відповідей #1 : 2011-03-15 00:24:17 »
Спробуйте погратися зі мінними LC_* (LC_CTYPE хочаб як uk_UA.CP1251).
LC_CTYPE=uk_UA.CP1251 grep -Hn "$CARG" "$@" | \
LC_CTYPE=uk_UA.UTF-8 iconv -f cp1251 |\
grep --color "$ARGC" -C100
« Змінено: 2011-03-15 00:32:52 від tech »

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: grep здурів
« Відповідей #2 : 2011-03-15 18:38:23 »
Спрацювало.
Як на мене, скособочувати grep таким чином, щоб він почав відчувати локаль - безсовісна дурість... і куди це світ покотився...
Працюючий варіант
$ cat `which wgrep`
#!/bin/bash
ARG="$1"
ARGC="$(echo $ARG | sed -e 's/\\\^/./;s/\^//')"
CARG="$(echo "$ARG" | iconv -t cp1251)"
shift
lct="$LC_CTYPE"
LC_ALL=C grep -Hn "$CARG" "$@" |\
LC_ALL="$lct" iconv -f cp1251 | grep --color "$ARGC" -C100

http://unixhelp.ed.ac.uk/CGI/man-cgi?grep
« Змінено: 2011-03-15 18:43:39 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: grep здурів
« Відповідей #3 : 2011-03-15 20:13:58 »
Залежить від того, що хочеться зробити. Іноді досить байтового рівня, а іноді потрібний складніший  механізм коляції або класифікації символів, який без змінних середовища не задаш ніяк.  Радий, що працює.
« Змінено: 2011-03-15 20:14:51 від tech »