grep -z и новая строка ('\n')

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
sgfault
Сообщения: 586
Статус: -

grep -z и новая строка ('\n')

Сообщение sgfault »

Допустим, из списка элементов, разделенных '\0', мне надо выбрать элементы (элементы, а не строки!), содержащие '\n'. И сделать я хочу это именно с помощью `grep`.
Для начала проверим, работает ли все как надо с '\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 $


Это так и должно и я чего-то не понимаю, или все-таки это баг?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: grep -z и новая строка ('\n')

Сообщение /dev/random »

sgfault писал(а):
10.05.2011 21:26
Это так и должно и я чего-то не понимаю, или все-таки это баг?

Похоже, grep встретившийся в регулярном выражении перевод строки воспринимает как конец регулярного выражения. По-хорошему, да, это баг.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: grep -z и новая строка ('\n')

Сообщение sgfault »

/dev/random писал(а):
10.05.2011 22:08
sgfault писал(а):
10.05.2011 21:26
Это так и должно и я чего-то не понимаю, или все-таки это баг?

Похоже, grep встретившийся в регулярном выражении перевод строки воспринимает как конец регулярного выражения. По-хорошему, да, это баг.

Ясно, спасибо.
Спасибо сказали: