[問題] sed 取代問題

看板Linux作者 (安靜)時間10年前 (2015/07/01 15:48), 編輯推噓0(0019)
留言19則, 6人參與, 最新討論串1/1
想請問的是目前因為資料搬移的關係 所以檔案的相對路徑有所變更 而這些路徑都是寫在 a.xml 裡面 然後每個資料夾裡面都有一個自己的 a.xml (名稱一樣) 本來用 notepad++ 一個一個更改 後來想到可以用 sed 來做替換 但是因為 路徑本身包含了 / 像是我想要把 sed -i 's/kap/alda/resouce/kbp/aldw/reource/2/g' a.xml 把綠色的地方替換成黃色的 這樣要怎麼去改寫 還有就是可以一次把這資料夾裡面的各個子資料夾中的 a.xml 內容做一次性替換嗎? 感謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.74.124.79 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1435736894.A.9EF.html

07/01 15:54, , 1F
s:kap/alda/resouce:kbp/aldw/reource/2:g
07/01 15:54, 1F

07/01 15:58, , 2F
用: OK!
07/01 15:58, 2F

07/01 16:27, , 3F
\
07/01 16:27, 3F

07/01 16:33, , 4F
s後面可以隨意用separator,1樓用:,我個人比較喜歡用@
07/01 16:33, 4F

07/01 18:05, , 5F
所以我前面加上 find . a.xml | sed ......... 去替換
07/01 18:05, 5F

07/01 18:05, , 6F
應該就可以了吧?
07/01 18:05, 6F

07/01 18:06, , 7F
還是先用 awk 列出檔案列表再來修改?
07/01 18:06, 7F

07/01 22:39, , 8F
用xargs -i sed -i 's///g' {}
07/01 22:39, 8F

07/02 00:53, , 9F
萬一你的路徑名有空白或其他特殊字元,請用 -print0 和
07/02 00:53, 9F

07/02 00:53, , 10F
| xargs -0
07/02 00:53, 10F

07/02 01:32, , 11F
find 語法完全不對,應該是 find . -name a.xml
07/02 01:32, 11F

07/02 01:33, , 12F
精準一點就.. find . -type f -name a.xml
07/02 01:33, 12F

07/02 01:34, , 13F
搜尋路徑常常有特殊字元與空白等,所以一般都用
07/02 01:34, 13F

07/02 01:34, , 14F
find . -type f -name "xxx" -print 0 | xargs -0 .....
07/02 01:34, 14F

07/02 01:35, , 15F
另外有時候 xargs 收到的結果太多可能一次帶入給
07/02 01:35, 15F

07/02 01:36, , 16F
要執行的命令引發引數太常問題,擔心這個可以搭配 -n
07/02 01:36, 16F

07/02 01:36, , 17F
find ...... -print0 | xargs -0 -n 200 sed ....
07/02 01:36, 17F

07/02 01:36, , 18F
-n 後面數字就看情況調整
07/02 01:36, 18F

07/02 13:32, , 19F
感謝!
07/02 13:32, 19F
文章代碼(AID): #1Lavi-dl (Linux)
文章代碼(AID): #1Lavi-dl (Linux)