Sed Issue - Неверный флаг в замещающей команде: '#' - PullRequest
0 голосов
/ 25 июня 2018

Я запускаю скрипт на mac, который был унаследован моей командой, и у него есть некоторый код замены, который, кажется, не работает должным образом.Я пробовал различные вспомогательные символы, такие как%, \ etc, но, похоже, ничего не работает.Может кто-нибудь дать мне представление о том, что еще я должен изменить.

Сценарий запускается так

./test.sh /Users/Apple/Test_Folder/ 425323 C6C7CB 425363 425363 425363 666666 666666 425363 425363 666666 425363 425363 a0a9b1 687582 a0a9b2

Проблема внутри сценария (test.sh) заключается в следующем дляloop

for f in "$1"/*.svg;
do
  sed -i '' 's\#000002\#'"$2"'/g;s\#000003\#'"$3"'/g;s\#000004\#'"$4"'/g;s\#000005\#'"$5"'/g;s\#000006\#'"$6"'/g;s\#000007\#'"$7"'/g;s\#000008\#'"$8"'/g;s\#000009\#'"$9"'/g;s\#000010\#'"$10"'/g;s\#000011\#'"$11"'/g;s\#000012\#'"$12"'/g;s\#000013\#'"$13"'/g;s\#000014\#'"$14"'/g;s\#000015\#'"$15"'/g;s\#000016\#'"$16"'/g' $f
done

Полученная ошибка: sed: 1: "s% # 000002% # 425323 / g; s% # ...": неверный флаг в команде замещения: '#'

Есть указатели?

Спасибо, Рам

1 Ответ

0 голосов
/ 25 июня 2018

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

for f in "$1"/*.svg;
do
  sed -i "
    s/#000002/#$2/g;
    s/#000003/#$3/g;
    s/#000004/#$4/g;
    s/#000005/#$5/g;
    s/#000006/#$6/g;
    s/#000007/#$7/g;
    s/#000008/#$8/g;
    s/#000009/#$9/g;
    s/#000010/#$10/g;
    s/#000011/#$11/g;
    s/#000012/#$12/g;
    s/#000013/#$13/g;
    s/#000014/#$14/g;
    s/#000015/#$15/g;
    s/#000016/#$16/g;
  " $f
done

Если вы удобны с тяжелой абстракцией, вы можете попробовать что-то подобное, но убедитесь, чтоВы испытываете это сильно ...

for s in $(seq 2 16)
do  n="$(printf "%06d" $s)"
    script="$script s/#$n/#\${$s}/g; "
done
for f in "$1"/*.svg;
do  eval " sed -i \" $script \" \"$f\" "
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...