xargs -I заменяет-str в find ... -exec sed - PullRequest
0 голосов
/ 06 ноября 2018

Я в системе GNU / Linux с Bash 4.4.23 и у меня есть файл с некоторыми переменными Bash:

ех.

export VARONE="var1"
export VARTWO="var2"
...

Я должен заменить ${VARIABLE} на {{VARIABLE}} в других файлах с расширением ".template" в папке "templates".

Я пытаюсь выполнить эту команду:

cat varfile \
  | grep export \
  | awk -F '=' '{print $1}' \
  | awk '{print $2}' \
  | xargs -I var -- \
      find templates -type f -iname "*.template" \
        -exec sed 's/${var}/{{var}}/g' {} \;

но мне не повезло :( похоже, что sed не совпадает с этим LHS, фактически он печатает исходный файл как вывод.

Кто-то может объяснить, что не так с приведенной выше командой?

1 Ответ

0 голосов
/ 06 ноября 2018

Единственная проблема - отсутствие флага -i и отсутствие экранирования $ для sed.

Вот более простой, проверенный, исходный конвейер с вышеупомянутыми исправлениями:

sed -nE '/^export /{s///;s/([^=]+).*/\1/;p;}' varfile |
    xargs -I var -- find templates -name '*.template' -exec sed -i '' 's/\${var}/{{var}}/g' {} +

Для уверенности я добавил флаг g, если переменная появляется более одного раза в строке.

...