Страница 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] ~/>
А во фре вообще ничего не выдает при аналогичном вызове.
Может кто сталкивался? Скажите в какую сторону копать

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 воспринимает строку не как регулярное выражение, а как обычный шаблон, по нему и ищет.
Как побороть?
А то я уже пошел дурным путем вызова другого интерпретатора, чтобы он обработал строку через свои функции и регулярное выражение. Подход на мой взгляд в принципе неверный!!!
Re: Не работают регулярные выражения в sed. FreeBSD 6.4
Добавлено: 2010-08-04 14:46:20
hizel
Re: Не работают регулярные выражения в sed. FreeBSD 6.4
Добавлено: 2010-08-04 15:25:54
telteron
мда... проглядел я...
видимо жара уже сказывается на умственной деятельности.
чувствую себя дебилом
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
Читал по ману, что именно так можно указать нечитаемые символы в регулярном выражении.
Чувствую что где-то опять туплю, но понять не могу где именно

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 сделать?

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 в моей версии не поддерживает такое регулярное выражение.