LINUX.ORG.RU

Ответ на: комментарий от isden

нет именно слово ) завтра поюзаю спасибо ))) надеюсь эта строчка не в абракадабре выведет совпадения которые нашла)

truetobetrue
() автор топика
Ответ на: комментарий от isden

всмысле, не сам файл на диске, а то, что прочитается в cat.

isden ★★★★★
()
Ответ на: комментарий от Led

Если это работает быстрее (как минимум с непатченным грепом) и с любыми извратами вроде -R, то почему бы нет?)

x3al ★★★★★
()
Ответ на: комментарий от isden

cat+pipe головного мозга

> cat file | iconv -f cp1251 | grep слово

cat file |

facepalm

anonymous
()
Ответ на: комментарий от x3al

Откуда «бестрее»?

Подумай, почему твой вариант может не работать корректно:) (подсказка: текущая локаль - UTF8)

Led ★★★☆☆
()

ааа! я не уточнил что мне нужно найти файл с этим текстом рекурсивно в заданной директории ))

truetobetrue
() автор топика

а вот такая команда не прокатыает(ничего не находит): grep `echo секс|iconv -t CP1251` ./ -R|iconv -f CP1251

такая прокатывает grep `echo main|iconv -t CP1251` ./ -R|iconv -f CP1251

((

truetobetrue
() автор топика
Ответ на: комментарий от Led

>(подсказка: текущая локаль - UTF8)
Потому, что в некоторых дистрибутивах grep ищет не байты, а символы. Лечится LANG=C и указанием -t/-f в iconv.

x3al ★★★★★
()
Ответ на: комментарий от isden

> cat file | iconv -f cp1251 | grep слово

iconv -f cp1251 file | grep слово

sin_a ★★★★★
()
LANG=ru_RU.cp1251 grep -r `echo "ОЛОЛО" |iconv -t cp1251` * |iconv -f cp1251                   
                                
bla/test:ОЛОЛО

или например так :)

lazyklimm ★★★★★
()
Ответ на: комментарий от sin_a

только лучше так:

grep слово --label=«$f»

а то имя файла выводиться не будет

lazyklimm ★★★★★
()
Ответ на: комментарий от x3al

>Лечится LANG=C

Не лечется. Потому как:

1) LANG=C не бывает. Бывает LANG=POSIX

2) при LANG=POSIX grep не будет работать в контексте локали CP1251.

И это ещё не всё. Думай дальше. Вторая подсказка: CP1251 -> UTF-8 всегда работает, обратное - не всегда.

Led ★★★☆☆
()
Ответ на: комментарий от Led

>2) при LANG=POSIX grep не будет работать в контексте локали CP1251.
worksforme:
LANG=C grep `echo -n слово|iconv -t cp1251 -f utf8` файл |iconv -f cp1251 -t utf8
Арч, grep 2.7 (⇒ ванильный).
О контексте локали cp1251 особо думать не нужно. Кодировка однобайтная, ложным срабатываниям неоткуда взяться.
Кажется, с недавних пор grep начал быть более юникодным, чем я думал, но LANG=C ставит всё на свои места.

x3al ★★★★★
()
Ответ на: комментарий от Led

>Вторая подсказка: CP1251 -> UTF-8 всегда работает, обратное - не всегда.
Тут не принципиально. Ищется заведомо вписывающаяся в CP1251 строка в CP1251 файле.

x3al ★★★★★
()
Ответ на: комментарий от x3al

Слишком много «если»:)

И ещё раз повторяю: LANG=C не бывает. То ты этого не знаешь, говорит о слабом владении предметом.

Led ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.