2011-05-20 104 views
2

任何人都可以幫助我嗎?Sed搜索和替換XML文件中的路徑

我想寫一個shell腳本,搜索的XML文件的路徑:

<string>User/MyUser/Library/Folder/File.txt<string> 

並將其替換爲另一個路徑路徑:

<string>/Library/CustomFolder/CustomFile.txt<string> 

,我正在尋找的路徑是可變的,但將始終包含單詞庫。

有什麼辦法來搜索>*/Library>/Library

替換它,然後我想尋找Library*<Library/CustomFolder/CustomFile.txt<

更換請仔細閱讀上述彷彿*字符是指任何字符串...

我目前正在嘗試使用sed -i(因爲我想編輯文件本身不只是標準輸出),但我有點noob,並且在嘗試測試時不斷收到錯誤它。

到目前爲止,我有:

sed -i 's/Library/TEST/g' ~/Library/Path/To/MyFile.xml 

這在-l命令錯誤結束返回多餘的字符,所以我還沒有得到在試圖制定出*位尚未...

有沒有更好的方法來做到這一點,或者我只是做錯了嗎?

在此先感謝!

馬特斯

+0

你能發佈你確切的錯誤信息嗎?你使用的是什麼操作系統和外殼(例如Linux和bash或者Windows和Cygwin) – OpenSauce 2011-05-20 06:11:57

回答

1

忽視,這不是編輯使用基於行編輯器的XML文件的最佳方式(如sed時),你可以如做到這一點:

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

sed -i.bak會做的將myfile.xml保存原始文件的備份就地編輯在MyFile.xml.bak
我用替換>後跟任意數量的包括以下Library字符串>Library>其他兩個字符s命令酮(s/>[^>]*Library/>Library/)。
另一種(s#Library[^<]*<#Library/CustomFolder/CustomFile.txt<#代替後跟任意數量的字符的字符串Library!=接着用Library/CustomFolder/CustomFile.txt<一個<<。請注意,我用#而不是通常的/避免必要性逃脫更換/字符字符串

+0

嗯,我仍然得到這個 – Mattus 2011-05-20 07:08:20

+0

l命令結尾的多餘字符 – Mattus 2011-05-20 07:08:43

+0

任何想法是什麼原因造成的?我試圖通過終端上的雪豹測試... – Mattus 2011-05-20 07:09:53

2

當您嘗試使用sed/awk實用程序修改您的xml文件 時,它會變得有點困難和複雜。如果你需要做一些更復雜的XML修改 該解決方案可以幫助你:

如果你可以安裝你的機器上一些軟件,那麼你可以嘗試:

XMLStarlet:http://xmlstar.sourceforge.net/

安裝後您可以編輯您的文件是這樣的:

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

當然,這個工具允許你做更復雜的任務不僅僅是編輯SI ngle xml元素的值。哪一天可能會變得非常有用。

完整的命令列表/功能可以在這裏找到:

http://xmlstar.sourceforge.net/doc/xmlstarlet.txt

0

我建議:

sed -i '' 's/Library/TEST/g' ~/Library/Path/To/MyFile.xml 

我認爲-i選項吞噬你的 'S' 命令的思維備份擴展

(剛和固定同樣的問題)