以下是xml文件,其中STORAGE_ACCOUNT_KEY应替换为EoKpaH0W / kqTv9awgIpQX5s + qQwGzXUSxMxhRjfSWG7SIUTWhut1OYQkNxhb3 / 9UKGf + g4tc3UaC0zKMTSrTNg ==
<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"
答案 0 :(得分:1)
要替换XML,我会使用XML解析器(例如sed
)而不是sed
。
那就是说,你的sed
表达是错误的。
s
s
命令使用3个分隔符(您想要的任何可打印字符),但这3个必须是相同的,并且由{{>后面的那个定义。 1}}命令。
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
请注意,如果每行只有1个要替换的字符串,则可能不需要命令末尾的g
修饰符。