Sed:如何用文件内容替换模式

时间:2013-07-15 12:15:15

标签: linux bash text replace

文件'sample.json'(JSON):

{
    "jsonrpc": "2.0",
    "method": "configuration.import",
    "params": {
       "format": "xml",
       "source": "REPLACE_ME_WITH_XMLSOURCE"
    },
    "auth": "91ea4764dcab42e8317b399c42985792",
    "id": 1
}

文件'source.xml'(XML,带空格和双引号的1长行):

<?xml version="1.0" encoding="UTF-8"?><zabbix_export>...</zabbix_export>

必需的结果(使用XML作为param值的JSON):

    ...
   "source": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><zabbix_export>...</zabbix_export>"
...

我尝试将'source.xml'的内容放到变量中并在sed中使用它,但没有成功:

# x=$(cat source.xml)
# sed "s/REPLACE_ME_WITH_XMLSOURCE/$x/" sample.json
sed: -e expression #1, char 80: unknown option to `s'
# sed "s/XMLSOURCE/"$x"/" sample.json
sed: -e expression #1, char 17: unterminated `s' command
#  sed "s/XMLSOURCE/"$x"/" sample.json
...

我尝试在变体中使用sed'/ REPLACE_ME_WITH_XMLSOURCE / r source.xml',但我的sed-fu还不足以解决它..

我试图在谷歌搜索,但是......你看到了这个问题..

感谢您的任何建议

2 个答案:

答案 0 :(得分:0)

您应使用除/个字符之外的其他内容来界定s的{​​{1}}命令。斜杠是替换字符串的一部分,因此会混淆sed。 尝试一些不属于替换字符串的其他分隔符,例如:

sed

答案 1 :(得分:0)

# read the xml file into a variable
xml=$(< source.xml)
# perform the substitution, adding appropriate escaping of quotes
sed 's|\("source": \).*|\1"'"${xml//\"/\\\\\"}"'"|' sample.json