使用sed命令修改GDML文件中目录路径失败的问题排查
问题分析与解决
你的sed命令操作有误,导致文件路径未改变,具体原因和修正方案如下:
原命令的问题
你执行的sed -i 's@jk@kj@' 60000222.gdml仅替换了字符串中的jk为kj,但待替换的完整内容是jk=":http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd",原命令并未处理后面的远程路径部分,因此文件里的路径自然不会更新为本地路径。
正确的sed命令
需要匹配完整的目标字符串进行替换,执行以下命令:
sed -i 's@jk=":http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"@kj="/home/shirin/TPS/Geant4/geant4.10.02.p02/source/persistency/gdml/schema/gdml.xsd"@' 60000222.gdml
如果需要批量处理所有GDML文件,可将文件名替换为*.gdml:
sed -i 's@jk=":http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"@kj="/home/shirin/TPS/Geant4/geant4.10.02.p02/source/persistency/gdml/schema/gdml.xsd"@' *.gdml
额外检查点
- 确认目标字符串存在:先用grep命令验证文件中确实包含待替换的完整字符串:
如果没有输出,说明文件中不存在该字符串,需要检查内容是否有拼写、大小写或空格差异。grep 'jk=":http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"' 60000222.gdml - 适配不同系统的sed:若在macOS上执行,BSD版本的sed要求
-i参数后加空后缀,命令需调整为:sed -i '' 's@jk=":http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"@kj="/home/shirin/TPS/Geant4/geant4.10.02.p02/source/persistency/gdml/schema/gdml.xsd"@' 60000222.gdml
内容的提问来源于stack exchange,提问作者ad_eb
相关产品推荐
相关产品推荐

