The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"'egrep -o ' - странное поведение"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 28-Апр-11, 21:48 
Объясните, пожалуйста, что происходит?

# cat file.txt
ABCDEFGH
# egrep -o "^A" file.txt
A
# egrep -o "^B" file.txt
# egrep -o "^A|^B|^C|^D|^E|^F|^G|^H" file.txt
A
B
C
D
E
F
G
H
# egrep -c "^A|^B|^C|^D|^E|^F|^G|^H" file.txt
1
#

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "'egrep -o ' - странное поведение"  +/
Сообщение от Andrey Mitrofanov on 28-Апр-11, 22:35 
> Объясните, пожалуйста, что происходит?

Ставлю на то, что -- FreeBSD! :-/

Очевидно, ключ -o в этой реализации "обрезает" входную строку перед следующим сравнением, и начало строки оказывается на "следующей" первой букве.

...
"У меня всё работает."(тм)

$ cat >file.txt
ABCDEFGH
$ egrep -o "^A|^B|^C|^D|^E|^F|^G|^H" file.txt
A
$ egrep --version
GNU grep 2.5.3

Copyright (C) 1988, 1992-2002, 2004, 2005  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 28-Апр-11, 22:44 
>> Объясните, пожалуйста, что происходит?
> Ставлю на то, что -- FreeBSD! :-/

/var/log > egrep -V
egrep (GNU grep) 2.5.1-FreeBSD

> Очевидно, ключ -o в этой реализации "обрезает" входную строку перед следующим
> сравнением, и начало строки оказывается на "следующей" первой букве.

Ну, как бы очевидно, что все происходит примерно так, но неочевидно, почему оно так происходит. По логике строго не должно. Категорически.

Хорошо, что в некоторых версиях оно работает правильно, потому что если б во всех - пришлось бы менять взгляды на окружающую реальность.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "'egrep -o ' - странное поведение"  +/
Сообщение от Andrey Mitrofanov on 28-Апр-11, 23:46 
>>> Объясните, пожалуйста, что происходит?
>> Ставлю на то, что -- FreeBSD! :-/
> egrep (GNU grep) 2.5.1-FreeBSD

Какой оголтелый позиксивизм с юниксвеем... :-O

>> Очевидно, ключ -o в этой реализации "обрезает" входную строку перед следующим
>> сравнением, и начало строки оказывается на "следующей" первой букве.
>все происходит примерно так, но неочевидно, почему оно так происходит.

Ошибка реализации обыкновенная.

Обновлять порты немедленно? ...или ставить gnu grep и писать багрипорт о возмутительной идеологической невыдержанности /bin/grep версии такой-то.

> По логике строго не должно. Категорически.

"Ну, кто ж знал-то?!"(c)изобретатели двухколёсных идеологически подкованных

:-j

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

7. "'egrep -o ' - странное поведение"  +/
Сообщение от Andrey Mitrofanov on 28-Апр-11, 23:50 
>> egrep (GNU grep) 2.5.1-FreeBSD
> ставить gnu grep

Ой! Да это ж он и есть??!  8-O

>> Категорически.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 28-Апр-11, 23:51 
>>> egrep (GNU grep) 2.5.1-FreeBSD
>> ставить gnu grep
> Ой! Да это ж он и есть??!  8-O

Дык, почти все волосы на жопе от отчаяния повырывал...

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 01-Май-11, 19:34 
>>> egrep (GNU grep) 2.5.1-FreeBSD
>> ставить gnu grep
> Ой! Да это ж он и есть??!  8-O

Детальное вскрытие показало, что болячка присутствует у всех версий гну-грепа 2.х.х младше 2.5.2, а также у pcre 8.хх. Учитывая, что пцрешный движок используется чуть менее, чем везде (включая экзим), разослал тучу багрепортов. Уже отписались фришники и пцрешники. Ждем ебилдов.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

8. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 28-Апр-11, 23:50 
> "Ну, кто ж знал-то?!"(c)изобретатели двухколёсных идеологически подкованных

Напомнило старое:
- А почему вы написали "от 20 до 150 килотонн"?
- Мы думали - там 20, а оно как бабахнет...

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

3. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 28-Апр-11, 23:03 
> Очевидно, ключ -o в этой реализации "обрезает" входную строку перед следующим
> сравнением, и начало строки оказывается на "следующей" первой букве.

Оказывается - нет :)


# cat >file.txt
HGFEDCBA
^D
# egrep -o "^A|^B|^C|^D|^E|^F|^G|^H" file.txt
H
G
F
E
D
C
B
A
#

Чудеса, да и только...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "'egrep -o ' - странное поведение"  +/
Сообщение от Andrey Mitrofanov on 28-Апр-11, 23:39 
>> Очевидно, ключ -o в этой реализации "обрезает" входную строку перед следующим
>> сравнением, и начало строки оказывается на "следующей" первой букве.
> Оказывается - нет :)

Чего "нет"-то? Не "очевидно" что ли? %)

> # cat >file.txt
> HGFEDCBA
> ^D
> # egrep -o "^A|^B|^C|^D|^E|^F|^G|^H" file.txt
> H
> G

Первая буква (во входной строке, не в паттерне) сопоставилась, вывели-отбросили, входная строка приняла вид GFEDCBA, следующей сопоставилась "первая" буква G.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 28-Апр-11, 23:47 
> Первая буква (во входной строке, не в паттерне) сопоставилась, вывели-отбросили, входная
> строка приняла вид GFEDCBA, следующей сопоставилась "первая" буква G.

Согласен.
Так или иначе, забагрепортил. Полдня убил на локализацию косяка.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

11. "'egrep -o ' - странное поведение"  +/
Сообщение от Аноним (??) on 02-Май-11, 03:35 

> Так или иначе, забагрепортил. Полдня убил на локализацию косяка.

Это наблюдается только под фряхой или в линуксах тоже так?

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

12. "'egrep -o ' - странное поведение"  +/
Сообщение от DeadLoco (ok) on 02-Май-11, 12:20 
> Это наблюдается только под фряхой или в линуксах тоже так?

Это наблюдается везде. Просто во фре еще с пятого релиза по 8.2 штатно идет гну-греп версии 2.5.1. Там, где используется хотя бы 2.5.2 - бага нет. В убунте вообще 2.6.3 уже.

Хуже всего то, что аналогичный косяк наблюдается в PCRE. И версии без бага просто не существует. А PCRE используется как движок для RE чуть ли не везде. Апач, пхп, экзим. Во фре достаточно команды
   pkg_info -Rr pcre*
чтобы увидеть, где косяки есть.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру