Это невозможно при использовании труб. Вложенность команд работает, хотя:
sed 's/@version@/'$(sha1sum $(xpi) | grep -Eow '^[^ ]+')'/' input.txt > output.txt
Также обратите внимание, что если результаты вложенной команды содержат символ /
, вам необходимо использовать другой символ в качестве разделителя (#
, |
, $
и _
- популярные) или как-нибудь избежать косой черты в вашей строке. В этом вопросе StackOverflow также есть решение проблемы побега. Эту проблему можно решить, отправив команду sed и заменив все прямые косые черты (для escape-символов) и обратную косую черту (чтобы избежать конфликтов с использованием /
в качестве внешнего разделителя sed).
Следующее регулярное выражение будет экранировать все \
символов и все /
символов в команде:
sha1sum $(xpi) | grep -Eow '^[^ ]+' | sed -e 's/\(\/\|\\\|&\)/\\&/g'
Вложив это, как мы делали выше, мы получаем это решение, которое должно должным образом экранировать косые черты в случае необходимости:
sed 's/@version@/'$(sha1sum $(xpi) | grep -Eow '^[^ ]+' | sed -e 's/\(\/\|\\\|&\)/\\&/g')'/' input.txt > output.txt
Лично я думаю, что это выглядит как беспорядок одной строкой, но это работает.