Замените строку на значение специальных символов, используя sed в Ubuntu - PullRequest
0 голосов
/ 02 мая 2018

Ниже приведен XML-файл, в котором STORAGE_ACCOUNT_KEY следует заменить на EoKpaH0W / kqTv9awgIpQX5s + qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3 / 9UKGf + g4tc3TR0 * 100N0

   <property>
      <name>fs.azure.account.key.storageaccountname.blob.core.windows.net</name>
      <value>STORAGE_ACCOUNT_KEY</value>
   </property>

Я пробовал следующее. Но ничто не помогает мне решить это.

  1. Использование / после s и до g

sed -i "s / STORAGE_ACCOUNT_KEY / EoKpaH0W / kqTv9awgIpQX5s + qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3 / 9UKGf + g4tc3UaC0Zg = тестовый файл * g1

Ошибка: -

sed: -e expression #1, char 32: unknown option to `s'
  1. Использование | после с и до г
sed -i "s|STORAGE_ACCOUNT_KEY/EoKpaH0W/kqTv9awgIpQX5s+qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3/9UKGf+g4tc3UaC0zKMTSrTNg==|g" test.xml

Ошибка: -

sed: -e expression #1, char 112: unterminated `s' command

Примечание: - $ STORAGE_ACCOUNT_KEY является динамической переменной, как показано ниже

sed -i "s|STORAGE_ACCOUNT_KEY/$STORAGE_ACCOUNT_KEY|g"

1 Ответ

0 голосов
/ 02 мая 2018

Чтобы заменить XML, я бы рекомендовал использовать синтаксический анализатор XML (например, xmllint) вместо sed.

Тем не менее, ваше sed выражение неверно.

sed s команда использует 3 разделителя (любой печатный символ, который вы хотите), но эти 3 должны быть одинаковыми и определяются одним сразу после команды s.

s/foo/bar/g   # right
s|foo|bar|g   # right
s|foo/bar|g   # wrong

Поскольку вы заменяете строку строкой base64, вам не следует использовать какой-либо из символов base64, поэтому в этом случае не используйте / в качестве разделителя sed.

Ваше выражение должно быть таким:

sed -i "s|STORAGE_ACCOUNT_KEY|EoKpaH0W/kqTv9awgIpQX5s+qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3/9UKGf+g4tc3UaC0zKMTSrTNg==|g" test.xml

Обратите внимание, что модификатор g в конце команды может не понадобиться, если у вас есть только 1 строка для замены в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...