Для начала проверим, работает ли все как надо с '\t'
Код: Выделить всё
sgf@shilvana /tmp $ ( printf "x\0\nx\ty\0x\0" | grep -z -e $'\x9' )
x ysgf@shilvana /tmp $
Здесь все правильно, выбран ровно один элемент. А теперь с '\n'
Код: Выделить всё
sgf@shilvana /tmp $ ( locale; printf "x\0\nx\ty\0x\0" | grep -z -e $'\xa' )
LANG=
LC_CTYPE=ru_RU.utf8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
x
x yxsgf@shilvana /tmp $
А здесь уже неправильно. Мне нужен один элемент, а не все. Проверим на всякий случай с POSIX
Код: Выделить всё
sgf@shilvana /tmp $ ( export LC_ALL=POSIX; locale; printf "x\0\nx\ty\0x\0" | grep -z -e $'\xa' )
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=POSIX
x
x yxsgf@shilvana /tmp $
Код: Выделить всё
sgf@shilvana /tmp $ grep -V
GNU grep 2.5.4
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
sgf@shilvana /tmp $
Это так и должно и я чего-то не понимаю, или все-таки это баг?