Replace Sed在xml文件中搜索和替换路径

Replace Sed在xml文件中搜索和替换路径,replace,sed,Replace,Sed,有人能帮我吗 我正在尝试编写一个shell脚本,用于在XML文件中搜索路径: <string>User/MyUser/Library/Folder/File.txt<string> 这将在l命令错误的末尾返回一个额外的字符,因此我还没有尝试计算出*位 有没有更好的方法,还是我做错了 提前谢谢 Mattus不管使用基于行的编辑器(如sed所示)编辑XML文件不是最好的方法,您可以这样做,例如: sed -i.bak 's/>[^>]*Library/>L

有人能帮我吗

我正在尝试编写一个shell脚本,用于在XML文件中搜索路径:

<string>User/MyUser/Library/Folder/File.txt<string>
这将在l命令错误的末尾返回一个额外的字符,因此我还没有尝试计算出*位

有没有更好的方法,还是我做错了

提前谢谢


Mattus

不管使用基于行的编辑器(如
sed
所示)编辑XML文件不是最好的方法,您可以这样做,例如:

sed -i.bak 's/>[^>]*Library/>Library/;s#Library[^<]*<#Library/CustomFolder/CustomFile.txt<#' ~/Library/Path/To/MyFile.xml

sed-i.bak的/>[^>]*Library/>Library/;s#Library[^当您试图修改xml文件时,它可能会变得有点困难和复杂
仅使用sed/awk实用程序。如果需要对xml进行更复杂的修改
此解决方案可能会帮助您:

如果您可以在计算机上安装一些软件,则可以尝试:

XMLStarlet:

安装后,您可以按如下方式编辑文件:

$>。/xmlstarlet ed-u'/xml/table/rec[@id=1]/numField'-v 42 xml/myfile.xml

当然,此工具允许您执行比编辑单个文件更复杂的任务 xml元素的值。有一天它会变得非常有用

可在此处找到完整的命令/功能列表:

我建议:

sed -i '' 's/Library/TEST/g' ~/Library/Path/To/MyFile.xml
我认为-I选项吞噬了您的“s”命令,认为它是备份扩展


(刚刚解决并修复了相同的问题)

您能发布准确的错误消息吗?您使用的是什么操作系统和shell(例如Linux和bash或Windows和Cygwin)知道是什么原因吗?我正试图通过雪豹上的终端进行测试…你的文件名中有空格吗?如果有-你引用了名称吗?你试图执行的实际行是什么?sed-i.bak~/Library/Preferences/TemporaryXMLpreference.xml的s/>[^>]*Library/>Library/;s#Library[^我认为正在被替换的*路径中可能有空格…这会有什么不同吗?sed-i.bak~/Library/Preferences/TemporaryXMLpreference.xml的/>[^>]*Library/>Library/;s#Library[^pattern中是否有空格需要替换并不重要。实际上,我想知道
sed
在哪里看到了错误消息中提到的
l
命令。只是想确定一下-您的
~
扩展到什么(执行
echo~
)?
sed -i.bak 's/>[^>]*Library/>Library/;s#Library[^<]*<#Library/CustomFolder/CustomFile.txt<#' ~/Library/Path/To/MyFile.xml
sed -i '' 's/Library/TEST/g' ~/Library/Path/To/MyFile.xml