Страница 1 из 1

Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 9:37:38
telteron
Заметил тут недавно такую фичу, когда писал скрипт.
В общем на линуховой машине выполняется как надо, а во FreeBSD не пашет.

Код: Выделить всё

[localhost@telteron] ~/> echo a111b | sed -ne '/a1\+b/p'
a111b
[localhost@telteron] ~/>
А во фре вообще ничего не выдает при аналогичном вызове.

Может кто сталкивался? Скажите в какую сторону копать :unknown:

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 9:48:35
hizel
гнутый sed отличается от bsd-ешного

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 14:21:35
telteron
Так по ману смотрю, вроде есть возможность использовать регулярные выражения.
В общем sed воспринимает строку не как регулярное выражение, а как обычный шаблон, по нему и ищет.

Как побороть? :st:
А то я уже пошел дурным путем вызова другого интерпретатора, чтобы он обработал строку через свои функции и регулярное выражение. Подход на мой взгляд в принципе неверный!!!

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 14:46:20
hizel

Код: Выделить всё

a111b | sed -nEe '/a1+b/p'

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 15:25:54
telteron
мда... проглядел я... :oops: :oops: :oops:
видимо жара уже сказывается на умственной деятельности.
чувствую себя дебилом :smile:

hizel, спасибо тебе большое.
из man sed
-E
Interpret regular expressions as extended (modern) regular
expressions rather than basic regular expressions (BRE's). The
re_format(7) manual page fully describes both formats.

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 17:42:37
telteron
Опять затуп у меня. Для чего мне эти регулярные выражения нужны были?
Чтобы можно было нечитаемый символ нулевого байта перехватить.

В общем cat /proc/номер процесса/cmdline хранит в себе полную запись командной строки, которая использовалась при запуске, но вот только разделителем является нулевой байт.

Задача преобразовать нулевые разделители в обычне пробелы, или чего нибудь другое, чтобы нормально юзать.
В общем вот такая конструкция не пашет:

Код: Выделить всё

#cat /proc/98473/cmdline | sed -nEe 's/\000/ /g' | cut -d" " -f2
Читал по ману, что именно так можно указать нечитаемые символы в регулярном выражении.

Чувствую что где-то опять туплю, но понять не могу где именно :pardon:

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 18:01:42
barut
А использовать xargs -0 религия не позволяет?

Код: Выделить всё

#cat /proc/98473/cmdline | xargs -0 | cut -d" " -f2

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-04 20:35:45
telteron
barut писал(а):А использовать xargs -0 религия не позволяет?

Код: Выделить всё

#cat /proc/98473/cmdline | xargs -0 | cut -d" " -f2
Позволяет :)

Только вопрос остается для меня открытым. Как сделать так, чтобы sed произвел нужные преобразования. Должно же ведь работать и через него.

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-06 9:36:10
telteron
Ну чего? Никто не знает что-ли как это через sed сделать? :sorry:

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-09 2:04:53
Overseer
что значит "нулевые разделители"? как выглядят они?
приведите плиз пример строчки, которую нужно порезать.

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-09 2:27:16
Overseer
пардон, недосмотрел)

Код: Выделить всё

~> perl -e 'print 5; print chr 0; print 3; print "\n"' | od -c
0000000    5  \0   3  \n
рабочие варианты:

Код: Выделить всё

~> perl -e 'print 5; print chr 0; print 3; print "\n"' | perl -pe 's/\0/F/' | od -c
0000000    5   F   3  \n

~> perl -e 'print 5; print chr 0; print 3; print "\n"' | tr '\0' 'U' | od -c
0000000    5   U   3  \n
с sed пока не получилось, да и нужен ли он вам, а?

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-09 3:12:17
Overseer
gsed - GNU-sed на FreeBSD:

Код: Выделить всё

~> perl -e 'print 5; print chr 0; print 3; print "\n"' | gsed -r 's/\x00/X/g' | od -c
0000000    5   X   3  \n

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-09 14:53:05
telteron
Спасибо всем за ответы. Просто хотел универсальности, поэтому заморочился с этим sed. Ну т.е. без всяких сторонних обработчиков (perl, ruby, php) хотелось написать то, что будет стопудово работать на любой системе. Видимо не тот случай.

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-09 15:01:29
Overseer
telteron писал(а):Спасибо всем за ответы. Просто хотел универсальности, поэтому заморочился с этим sed. Ну т.е. без всяких сторонних обработчиков (perl, ruby, php) хотелось написать то, что будет стопудово работать на любой системе. Видимо не тот случай.

Код: Выделить всё

#cat /proc/98473/cmdline | sed -nEe 's/\000/ /g' | cut -d" " -f2
а что вам мешает использовать

Код: Выделить всё

#cat /proc/98473/cmdline | tr '\0' ' ' | cut -d" " -f2
tr на линуксе не так работает? или на sed'е свет клином сошелся? :"":

Re: Не работают регулярные выражения в sed. FreeBSD 6.4

Добавлено: 2010-08-09 18:11:58
telteron
Проморгал я. С tr вариант прокатил!!! Как впрочем и с xargs -0.

Я просто думал, что я по дебильности своей чего-то не так с ним делаю. Команды не так передаю ну и т.д. и т.п. А оказывается он зараза неправильно работает. Ну т.е. он не работает как надо :)
Просто привик к том, что во FreeBSD сказал "делай то-то", и машина делает, а тут затуп.

Все-таки видимо sed в моей версии не поддерживает такое регулярное выражение.