【发布时间】:2015-08-27 14:41:53
【问题描述】:
变量 XFILEBASE64 具有 base64 编码的内容,我想用该 base64 内容替换一些字符串。
果然 base64 包含了特殊字符,我已经尝试将 $'\001' 作为分隔符,但仍然收到错误消息。有什么建议吗?
XFILEBASE64=`cat ./sample.xml | base64`
cat ./template.xml | sed "s$'\001'<Doc>###%DOCDATA%###<\/Doc>$'\001'<Doc>${XFILEBASE64}<\/Doc>$'\001'g"
> sed: -e expression #1, char 256: unterminated `s' command
编辑:看起来问题与 sed 无关,它必须隐藏在 base64 操作中。
示例.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a>testsdfasdfasdfasfasdfdasfdads</a>
重现问题:
foo=`base64 ./sample.xml`
echo $foo | base64 --decode
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<base64: invalid input
【问题讨论】:
-
哪个操作系统和最终 LANG ? Unix 根据操作系统和 LANG 值进行不同的处理,而 sed 是纯文本(如果我没记错的话是 ASCII),因此这些字符往往被解释为 EOL。也不是每个 sed 都允许十六进制编码(八进制似乎更可用)
-
操作系统是 RHEL 7.1 和 LANG en_US.UTF-8,我不认为十六进制是一个问题,如果我留下十六进制分隔符并用静态字符串替换变量内容就可以了。
-
对,回复我更清楚,这不是变量或模板文件中特殊字符的问题,您只需将十六进制作为分隔符即可