Ниже приведен XML-файл, в котором STORAGE_ACCOUNT_KEY следует заменить на EoKpaH0W / kqTv9awgIpQX5s + qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3 / 9UKGf + g4tc3UaC0zKMTS =
<property>
<name>fs.azure.account.key.storageaccountname.blob.core.windows.net</name>
<value>STORAGE_ACCOUNT_KEY</value>
</property>
Я пробовал следующее. Но ничего не помогает решить.
sed -i "s/STORAGE_ACCOUNT_KEY/EoKpaH0W/kqTv9awgIpQX5s+qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3/9UKGf+g4tc3UaC0zKMTSrTNg==/g" test.xml
Ошибка:-
sed: -e expression #1, char 32: unknown option to `s'
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"
Чтобы заменить 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
в конце команды может не понадобиться, если у вас есть только одна строка для замены в каждой строке.