LINUX.ORG.RU

а почему бы не подставить сразу значение?

TERRANZ ★★★★ ()

Можно так?

Да.

man sh

anonymous ()

это можно сделать, используя расширения GNU.

В стандартном sed такого нет. В GNU — есть. Опция `e' команды `s' позволяет заменить на результат выполнения команды, например:

$ echo hello world| sed 's/hello/date/e'
Вт. авг.  7 14:04:36 MSK 2012
anarquista ★★★★★ ()
Ответ на: комментарий от KRoN73

в смысле, `echo \1 | s/a/b/g` ? Так не работает. Нужно как-то вставить «функцию» от бекреференса..

pianolender ★★★ ()
Ответ на: комментарий от anarquista

У меня sed gnu, но на вашу строку ругается:

[ 14:38:22 root@sys ~ ] echo hello world | sed 's/hello/date/e'
date: invalid date `world'
pianolender ★★★ ()
Ответ на: комментарий от pianolender

Сначала заменяется hello на date, затем исполняется вся строка «date world»

sdio ★★★★★ ()
Ответ на: комментарий от pianolender

ну да, там world не должно быть, получается, что исполняется date world.

Вот такой пример:

$ echo yesterday | sed 's/^/date -d/e'
Пн. авг.  6 14:17:01 MSK 2012

anarquista ★★★★★ ()
Ответ на: комментарий от pianolender

в смысле, `echo \1 | s/a/b/g` ? Так не работает

Конечно, так не работает. Только зачем тут echo?

KRoN73 ★★★★★ ()
Ответ на: комментарий от sdio

Это я понял по своему эксперименту, а вот коллега anarquista либо пользуется другим sed, либо запостил пример по памяти.

Нужно выполнить как команду не все входное выражение, а только то, что в поле «на что заменить».

pianolender ★★★ ()
Ответ на: комментарий от KRoN73

Нужно получить результат команды, которой в качестве параметра передали бекреференс.

pianolender ★★★ ()

perl -pe 's/(...)/function($1)/ge'

AITap ★★★★★ ()
Ответ на: комментарий от pianolender

Нужно получить результат команды, которой в качестве параметра передали бекреференс.

$ echo 'Now %date%' | perl -ne 's/%date%/`date`/e; print'
Now Вт. авг.  7 14:28:38 MSK 2012

?

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

нужно что-то вида:

echo 'Now +%m' | perl -ne 's(+%m)/`date \1`/<что там нужно>'

а вывело чтобы

Now 08

pianolender ★★★ ()
sed -e 's/$what/& '$(script.sh $what)' &/g' file

scipt.sh должен выводить строку через echo

leave ★★★★★ ()
Последнее исправление: leave (всего исправлений: 1)
Ответ на: комментарий от pianolender

[code=perl]
$ echo Now +%m | perl -ne 's/(\+%\w)/`date $1`/e; print'
Now 08
[/code]

?

KRoN73 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.