sed: 1: “…”: invalid command code on Mac OS

追憶丶年華發表於2018-01-16

昨天因為專案中有很多檔案的同一個變數需要批量替換成另一個,想用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 ./

相關文章