sed -i '/s/<property><name>hadoop.embedded.local.mode<\/name><value>true<\/value<\/property>
/<property><name>hadoop.embedded.local.mode<\/name><value>false<\/value><\/property>/'
hive-site.xml
sed javax.jdo.选项.连接URL 新的瓦尔=“Chandu_jdbc”sudo sed -i“/javax.jdo.选项.连接URL/!b;n;c${新瓦尔}”/tmp/配置单元站点. xml sudo sed -i '/javax.jdo.选项.连接URL/!B;n; c“${新瓦尔}”/tmp/配置单元站点. xml sudo sed -i“/javax.jdo.选项.连接URL/!B;n;c${新瓦尔}”/tmp/配置单元站点. xml sudo sed -i '/javax.jdo.选项.连接URL/!B;n; c“”${新瓦尔}“”“/临时文件/配置单元站点. xml
5条答案
按热度按时间sxpgvts31#
这可能是XPath和一个合理的XML库的工作。直接从shell脚本执行此操作将创建一个复杂且可能脆弱的解决方案。我将使用
python
和流行的lxml
库作为示例:基本上,它选择任何属性节点(文档中的任何地方),如果它包含具有该值的
<name>
元素,那么它选择value元素。然后,您可以根据自己的喜好修改元素的内容,并再次打印为字符串。XPath是标准的,因此大致相同的代码应该也可以在其他实现中工作。tjjdgumg2#
显然有很多方法可以做到这一点,但为什么不试试awk(gawk)呢?
调用上述脚本,如下所示:
6psbrbz93#
你可以给予整个街区和零钱。
xienkqul4#
如果要更改的值总是在下一行,则可以首先使用以下命令获取所需元素的行号
然后递增到下一行
然后使用sed或ex修改该值,在这些情况下我更喜欢使用ex,因为它消除了对临时文本文件的需要。
f0brbegy5#
sed javax.jdo.选项.连接URL
新的瓦尔=“Chandu_jdbc”sudo sed -i“/javax.jdo.选项.连接URL/!b;n;c${新瓦尔}”/tmp/配置单元站点. xml sudo sed -i '/javax.jdo.选项.连接URL/!B;n; c“${新瓦尔}”/tmp/配置单元站点. xml sudo sed -i“/javax.jdo.选项.连接URL/!B;n;c${新瓦尔}”/tmp/配置单元站点. xml sudo sed -i '/javax.jdo.选项.连接URL/!B;n; c“”${新瓦尔}“”“/临时文件/配置单元站点. xml