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

Все вопросы по установке, обновлению и эксплуатации FreeBSD: конфигурация и сопровождение.

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-04 9:37:38

Заметил тут недавно такую фичу, когда писал скрипт.
В общем на линуховой машине выполняется как надо, а во FreeBSD не пашет.

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

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

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

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

Непрочитанное сообщение hizel » 2010-08-04 9:48:35

гнутый sed отличается от bsd-ешного
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-04 14:21:35

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

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

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

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

Непрочитанное сообщение hizel » 2010-08-04 14:46:20

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

a111b | sed -nEe '/a1+b/p'
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-04 15:25:54

мда... проглядел я... :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.

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-04 17:42:37

Опять затуп у меня. Для чего мне эти регулярные выражения нужны были?
Чтобы можно было нечитаемый символ нулевого байта перехватить.

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

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

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

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

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

barut
рядовой
Сообщения: 26
Зарегистрирован: 2008-09-11 13:17:10

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

Непрочитанное сообщение barut » 2010-08-04 18:01:42

А использовать xargs -0 религия не позволяет?

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

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

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-04 20:35:45

barut писал(а):А использовать xargs -0 религия не позволяет?

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

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

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

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-06 9:36:10

Ну чего? Никто не знает что-ли как это через sed сделать? :sorry:

Overseer
сержант
Сообщения: 221
Зарегистрирован: 2008-03-20 23:00:42

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

Непрочитанное сообщение Overseer » 2010-08-09 2:04:53

что значит "нулевые разделители"? как выглядят они?
приведите плиз пример строчки, которую нужно порезать.

Overseer
сержант
Сообщения: 221
Зарегистрирован: 2008-03-20 23:00:42

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

Непрочитанное сообщение Overseer » 2010-08-09 2:27:16

пардон, недосмотрел)

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

~> 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 пока не получилось, да и нужен ли он вам, а?

Overseer
сержант
Сообщения: 221
Зарегистрирован: 2008-03-20 23:00:42

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

Непрочитанное сообщение Overseer » 2010-08-09 3:12:17

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

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-09 14:53:05

Спасибо всем за ответы. Просто хотел универсальности, поэтому заморочился с этим sed. Ну т.е. без всяких сторонних обработчиков (perl, ruby, php) хотелось написать то, что будет стопудово работать на любой системе. Видимо не тот случай.

Overseer
сержант
Сообщения: 221
Зарегистрирован: 2008-03-20 23:00:42

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

Непрочитанное сообщение Overseer » 2010-08-09 15:01:29

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'е свет клином сошелся? :"":

telteron
проходил мимо

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

Непрочитанное сообщение telteron » 2010-08-09 18:11:58

Проморгал я. С tr вариант прокатил!!! Как впрочем и с xargs -0.

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

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