昨天因為專案中有很多檔案的同一個變數需要批量替換成另一個,想用sed做這個。Linux 這樣其實就可以了
~# sed -i “s/string_old/string_new/g” grep -rl string_old ./
Mac 會得到丟擲這個錯誤
sed: 1: “…”: invalid command code .
為什麼呢,在 Mac 上用 man 檢視sed命令~# man sed
…
-i extensionEdit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.
….
翻譯:就地替換檔案,根據提供的副檔名儲存原始檔備份。如果不提供副檔名,則不備份。建議替換操作時提供檔案備份的副檔名,因為如果恰巧磁碟耗盡的話,你將冒著原檔案被損壞的風險。
所以,如果我們不需要備份的話,可以這樣
~# sed -i “” “s/string_old/string_new/g” grep -rl string_old ./
或者要備份原檔案
~# sed -i “.bak” “s/string_old/string_new/g” grep -rl string_old ./