LINUX.ORG.RU

GNU grep-2.10: исправление ошибок

 ,


0

1

GNU grep — программа, ищущая в файле строки, чьи подстроки соответствуют заданному регулярному выражению.

Спустя пять месяцев разработки после выхода grep-2.9 Джим Мейеринг (Jim Meyering)объявил о выходе новой версии. Больших изменений нет. Однако, было сделано много изменений gnulib, включая ряд улучшений переносимости. Часть этих изменений затрагивает и grep.

Достаточно значительные изменения:

  • grep больше не ошибается при обработке байтов с установленным старшим битом при работе в системах, где «char» — это знаковый тип (ошибка появлялась только в MS Windows);
  • grep теперь отклоняет такие команды как
    grep -r pattern . > out
    , в которых файл ввода также является и выводом, так как это может вызывать бесконечные циклы.

>>> Подробности

★★★★★

Проверено: Shaman007 ()

>ошибка появлялась только в MS Windows

оно еще и под оффтопом пашет. Фигею.

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

это как радио свобода для диссидентов

anonymous ()

grep не нужен

anonymous ()

Достаточно значительные изменения:
значительные

Значимые же!

gnu-eabi ()
Ответ на: комментарий от splinter

ошибка появлялась только в MS Windows

оно еще и под оффтопом пашет. Фигею.

Я тебя обрадую. У оффтопика даже есть свой командно-строковый grep, правда без блекджеков.

gnu-eabi ()

Это мини-новость по-любому.

Jayrome ★★★★★ ()
Ответ на: комментарий от gnu-eabi

cmd.exe


C:\Users\Администратор>grep
«grep» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.


find есть.

splinter ★★★★★ ()
Ответ на: комментарий от anonymous
ls -al /home/ | grep anonymous

Анонимусы не нужны, grep есть у всех и нужен.

partyzan ★★★ ()

grep теперь отклоняет такие комадны как

grep -r pattern . > out
, в которых файл ввода также является и выводом, так как это может вызывать бесконечные циклы.


Хммм... К ружьям теперь модно прикручивать защиту от простреливания себе ног?
Интересно, от

grep -r pattern . | cat > out
в следующей версии тоже отдельную защиту приделают?

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

«grep» не является внутренней или внешней

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

Там какую-то хренотень нужно ставить. То ли resource kit, то ли ещё чего...

gnu-eabi ()

каждый раз, когда я читаю на ЛОРе новости об исправлении ошибок в таких утилитах, как grep и coreutils, мне трудно даëтся осознание, что в них вообще бывают ошибки.

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

Я тут с удивлением наткнулся на баг в umount. Ну или не баг, но расхождение с документацией. В мане написано, что -t vfs_type указывает список типов ФС, требующих (если перед типом ФС есть префикс no, то НЕ требующих) выполнения указанных действий. Но работает -t только при наличии опции -a (отмонтировать всё) - это выяснилось, если на код посмотреть. Не совсем понятно даже, куда багрепорт слать.

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

А какое поведение ожидалось от umount c "-t...", но без "-a"?

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

umount -t notmpfs /tmpfsmountpoint <еще mountpoints> не должно трогать /tmpfsmountpoint. Аналогичный кусок кода был встречен в opensuse в /etc/init.d/boot.localfs, и в результате при выключении машины выдавалось сообщение об ошибке.

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

>ls -al /home/ | grep anonymous

Анонимусы не нужны, grep есть у всех и нужен.

Я смотрю, тебе уже и root не нужен с твоей логикой. Убунтоид штоле?

anonymous ()

> Спустя пять месяцев разработки
Два часа разработки, 5 месяцев для хобби.

CYB3R ★★★★★ ()

ошибка появлялась только в MS Windows

Греп в шindoшs? No wai~

Akamanah ★★★★★ ()
Ответ на: комментарий от gnu-eabi

>Я тебя обрадую. У оффтопика даже есть свой командно-строковый grep, правда без блекджеков.
Инкрементирую. В оффтопике только шлюхи.

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

Эээ... "... есть люди, которые желают странного". Что-то не пойму с чем таким образом пытались бороться. Есть набор mountpoints из которых нужно всё отмонтировать, но а) не известно что там куда смонтировано и б) отмонтировать на самом деле нужно не всё, а только то, что не tmpfs?

anonymous ()

в системах, где «char» — это знаковый тип

Эээ... А что много где оно не так?

BTW:

$ echo 'int main(void){char c=128; return c>127;}' | cc -o char -x c - && ./char || echo 'WTF!!!' && rm char
<stdin>: In function 'main':
<stdin>:1: warning: comparison is always false due to limited range of data type
$

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

Там всё сложнее, я привел только команду, которая не сработает, как ожидалось после прочтения мана. Она формируется в ходе работы скрипта, причем там нет никаких комментариев, так что понять, почему она формируется именно так, невозможно. По сути, что и куда смонтировано, это известно. Но почему-то (упрощенно) если ФС имеет тип tmpfs, то она заносится в список mountpoints, и затем отмонтируется. А после цикла по всем примонтированным разделам, выполняется команда на отмонтирование $mountpoints, но с флагом -t notmpfs. Зачем так сделано - я не в курсе, думаю что тут можно было бы и попроще.

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

Действительно, странно это. Вот этот коммит: http://git.savannah.gnu.org/cgit/grep.git/commit/?id=7d20c09e3e7cf3af9060f395...

[code] - (wc) = (c) = (unsigned char) *lexptr++; \ + (wc) = (c) = to_uchar (*lexptr++); \ [/code] где to_uchar [code] /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ static inline unsigned char to_uchar (char ch) { return ch; } [/code]

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

Действительно, странно это. Вот этот коммит: http://git.savannah.gnu.org/cgit/grep.git/commit/?id=7d20c09e3e7cf3af9060f395e88...

 - (wc) = (c) = (unsigned char) *lexptr++; \ + (wc) = (c) = to_uchar (*lexptr++); \ 

где to_uchar

 /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ static inline unsigned char to_uchar (char ch) { return ch; } 

anarquista ★★★★★ ()

Этот grep уже стал потоковым, или всё так же, полностью текст в память запихивает?

Помнится, не мог он осилить 10Gb текстовик на при 2Gb оперативки и 4Gb свопа.

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

Вроде в этом году попадалась ошибка в patch. В генте ~arch на некоторое время стал ванильным.

g1itch ()
Ответ на: комментарий от anarquista

А, так тут речь несколько о другом. Типа «исправили» одно неопределённое поведение на на другое :)

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

> каждый раз, когда я читаю на ЛОРе новости об исправлении ошибок в таких утилитах, как grep и coreutils, мне трудно даëтся осознание, что в них вообще бывают ошибки.

Никогда не ловил? А я поймал два бага в GNU-утилитах в течении недели.

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

Поделитесь, если не жалко? Все же любят страшные истории на ночь.

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

> /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */

Что за бред?

static inline unsigned char to_uchar (char ch) { return ch; }

Повторю свою сентенцию: что за бред???

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

> 1st: dc -e [

2nd: (e='eval $e'; eval $e)

И? Хоть прокомментируй что должно было быть и где баг.

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

> Хоть прокомментируй что должно было быть и где баг.

Неужто сложно воткнуть их в терминал по очереди и увидеть два сегфолт?

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

> это как радио свобода для диссидентов

толсто, ибо переход от неявного к явному несколько меняет полюса: `denial and deception' оказались более эффективными, нежели занавес.

n01r ★★ ()
Ответ на: комментарий от gnu-eabi

Лучше расскажи, есть ли под вендувс терминал чуть менее убогий, нежели cmd.exe?

Чтобы ресайзил окошко, как терминал под иксами, а не как вот это недоподелие cmd.exe.

Чтобы можно скопировать текст просто выделив его мышью и черт сним, ctrl-c, а не как в этом недоподелии cmd.exe.

Чтобы при автодополнении не стирал текст справа от автодополнения, как эт делает недоподелие cmd.exe.

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

Лучше расскажи, есть ли под вендувс терминал чуть менее убогий, нежели cmd.exe?

Ты у меня спрашиваешь, как будто я эксперт по оффтопикам. Откуда я знаю? Но всё-таки я слышал, что илитка сидит через путти. Это всё, что я могу посоветовать.

gnu-eabi ()
Ответ на: комментарий от Xintrea
for i in `seq 1 5000` ; do cat test >> verybigtext ; done
ls -l verybigtext 
-rw-r--r-- 1 user user 18069250000 Ноя 21 16:41 verybigtext
grep AIRB verybigtext | wc -l
5000
free -m
             total       used       free     shared    buffers     cached
Mem:          1992       1855        136          0         25       1212
-/+ buffers/cache:        617       1374
Swap:         1506        143       1362

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