如何将base64编码的内容传递给sed?
How to pass base64 encoded content to sed?
变量 XFILEBASE64 具有 base64 编码的内容,我想用该 base64 内容替换一些字符串。
果然base64里面有特殊字符,试了$'\001'作为分隔符,还是报错。有什么建议吗?
XFILEBASE64=`cat ./sample.xml | base64`
cat ./template.xml | sed "s$'[=10=]1'<Doc>###%DOCDATA%###<\/Doc>$'[=10=]1'<Doc>${XFILEBASE64}<\/Doc>$'[=10=]1'g"
> sed: -e expression #1, char 256: unterminated `s' command
编辑:看起来问题与 sed 无关,它必须隐藏在 base64 操作中。
sample.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
Base64 只有三个特殊字符 (wikipedia) - 通常是 +
、/
和 =
。例如,您可以使用 @
、</code>、<code>&
或 ;
没有问题。
Tempo64="$( echo "${XFILEBASE64}" | sed 's/[\&*./+!]/\&/g' )"
sed "s!<Doc>###%DOCDATA%###</Doc>!<Doc>${Tempo64}</Doc>!g" ./template.xml
- 应该工作并且posix合规
命令
sed "s$'[=10=]1'<Doc>###%DOCDATA%###<\/Doc>$'[=10=]1'<Doc>${XFILEBASE64}<\/Doc>$'[=10=]1'g"
应该写成
sed s$'[=11=]1'"<Doc>###%DOCDATA%###<\/Doc>"$'[=11=]1'"<Doc>${XFILEBASE64}<\/Doc>"$'[=11=]1'g
也就是说,$'...'
在双引号里面,并不特殊
问题出在 base64 编码上,base64 的 -w 0 选项解决了问题。
cat ./sample.xml | base64 -w 0
变量 XFILEBASE64 具有 base64 编码的内容,我想用该 base64 内容替换一些字符串。
果然base64里面有特殊字符,试了$'\001'作为分隔符,还是报错。有什么建议吗?
XFILEBASE64=`cat ./sample.xml | base64`
cat ./template.xml | sed "s$'[=10=]1'<Doc>###%DOCDATA%###<\/Doc>$'[=10=]1'<Doc>${XFILEBASE64}<\/Doc>$'[=10=]1'g"
> sed: -e expression #1, char 256: unterminated `s' command
编辑:看起来问题与 sed 无关,它必须隐藏在 base64 操作中。
sample.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
Base64 只有三个特殊字符 (wikipedia) - 通常是 +
、/
和 =
。例如,您可以使用 @
、</code>、<code>&
或 ;
没有问题。
Tempo64="$( echo "${XFILEBASE64}" | sed 's/[\&*./+!]/\&/g' )"
sed "s!<Doc>###%DOCDATA%###</Doc>!<Doc>${Tempo64}</Doc>!g" ./template.xml
- 应该工作并且posix合规
命令
sed "s$'[=10=]1'<Doc>###%DOCDATA%###<\/Doc>$'[=10=]1'<Doc>${XFILEBASE64}<\/Doc>$'[=10=]1'g"
应该写成
sed s$'[=11=]1'"<Doc>###%DOCDATA%###<\/Doc>"$'[=11=]1'"<Doc>${XFILEBASE64}<\/Doc>"$'[=11=]1'g
也就是说,$'...'
在双引号里面,并不特殊
问题出在 base64 编码上,base64 的 -w 0 选项解决了问题。
cat ./sample.xml | base64 -w 0