Труба sed захватывает группу через внешнюю программу перед заменой? - PullRequest
0 голосов
/ 27 октября 2019

Есть ли способ для sed передать группу захвата другой программе, сделав \1 в RHS регулярного выражения равным выходу этой программы?

Например, запустив

sed 's/lorem ipsum \(foobar\)/\1/g' file.txt

передаст "foobar" через другую программу (например, tr 'o' 'a'), чтобы \1 был "faabar" для sed, чтобы заменить "lorem ipsum foobar" на "lorem ipsum faabar"?

Это простой пример. Я понимаю, что могу конвертировать "foobar" в "faabar", не используя tr.

1 Ответ

0 голосов
/ 29 октября 2019

Используйте параметр execute:

e
Эта команда позволяет направить ввод из команды оболочки в пространство шаблонов. Если была сделана подстановка, выполняется команда, найденная в пространстве шаблонов, и пространство шаблонов заменяется ее выводом. Завершающий перевод новой строки подавлен;результаты не определены, если команда, которая должна быть выполнена, содержит символ NUL. Это расширение GNU sed.

( источник ; оригинальный источник )

...