[問題] sed 取代問題

作者: asdrt (安靜)   2015-07-01 15:48:09
想請問的是目前因為資料搬移的關係
所以檔案的相對路徑有所變更
而這些路徑都是寫在 a.xml 裡面
然後每個資料夾裡面都有一個自己的 a.xml (名稱一樣)
本來用 notepad++ 一個一個更改
後來想到可以用 sed 來做替換
但是因為 路徑本身包含了 /
像是我想要把
sed -i 's/kap/alda/resouce/kbp/aldw/reource/2/g' a.xml
把綠色的地方替換成黃色的 這樣要怎麼去改寫
還有就是可以一次把這資料夾裡面的各個子資料夾中的 a.xml 內容做一次性替換嗎?
感謝
作者: OSDBNetwork (路人甲)   2015-07-01 15:54:00
s:kap/alda/resouce:kbp/aldw/reource/2:g
作者: asdrt (安靜)   2015-07-01 15:58:00
用: OK!
作者: obarisk (OSWALT)   2015-07-01 16:27:00
\
作者: kerwinhui (kezza)   2015-07-01 16:33:00
s後面可以隨意用separator,1樓用:,我個人比較喜歡用@
作者: asdrt (安靜)   2015-07-01 18:05:00
所以我前面加上 find . a.xml | sed ......... 去替換應該就可以了吧?還是先用 awk 列出檔案列表再來修改?
作者: cherubx (DanzYam)   2015-07-01 22:39:00
用xargs -i sed -i 's///g' {}
作者: kerwinhui (kezza)   2015-07-02 00:53:00
萬一你的路徑名有空白或其他特殊字元,請用 -print0 和| xargs -0
作者: kenduest (小州)   2015-07-02 01:32:00
find 語法完全不對,應該是 find . -name a.xml精準一點就.. find . -type f -name a.xml搜尋路徑常常有特殊字元與空白等,所以一般都用find . -type f -name "xxx" -print 0 | xargs -0 .....另外有時候 xargs 收到的結果太多可能一次帶入給要執行的命令引發引數太常問題,擔心這個可以搭配 -nfind ...... -print0 | xargs -0 -n 200 sed ....-n 後面數字就看情況調整
作者: asdrt (安靜)   2015-07-02 13:32:00
感謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com