os x下使用sed進行字串替換

2022-08-27 07:21:08 字數 866 閱讀 8365

先舉個栗子:

sed -i 's/old_link/new_link/g' *

趕緊跑去一試,在gnu下是可以的,不過在os x下你應該會得到如下的返回結果:

command a expects \ followed by text

哎喲喂,別人都可以,為啥我的不信,特麼的,到底發生了什麼:

其實這個事情是這樣的,如果你想使用 -i 選項,你需要提供乙個備份檔案的副檔名,比如你當前目錄有兩個檔案,這兩個檔案都需要完成替換,兩個檔案分別是:

abc.txt

xyz.txt

那麼你的命令就應該是:

sed -i '.original' 's/old_link/new_link/g' *

然後你得到了4個檔案:

abc.txt

abc.txt.original

xyz.txt

xyz.txt.original

然後你再把 .original 的兩個檔案刪除就行了,可以使用:

rm -rf *.original

為啥會這樣呢?

那是因為沒有辦法找到乙個有效的命令滿足所有的情形:

sed -i -e ... - does not work on os x as it creates -e backups

sed -i'' -e ... - does not work on os x 10.6 but works on 10.9+

sed -i '' -e ... - not working on gnu

所以,這個只是一種折衷的解決方案,over

sed 字串替換

1.sed替換的基本語法為 sed s 原字串 替換字串 單引號裡面,s表示替換,三根斜線中間是替換的樣式,特殊字元需要使用反斜線 進行轉義。2.單引號 是沒有辦法用反斜線 轉義的,這時候只要把命令中的單引號改為雙引號就行了,格式如下 要處理的字元包含單引號 sed s 原字串包含 替換字串包含 3...

sed 字串替換

1.sed替換的基本語法為 sed s 原字串 替換字串 單引號裡面,s表示替換,三根斜線中間是替換的樣式,特殊字元需要使用反斜線 進行轉義。2.單引號 是沒有辦法用反斜線 轉義的,這時候只要把命令中的單引號改為雙引號就行了,格式如下 要處理的字元包含單引號 sed s 原字串包含 替換字串包含 3...

shell下進行字串擷取

linux 的字串擷取很有用。有八種方法。假設有變數 var 1.號擷取,刪除左邊字元,保留右邊字元。複製 如下 echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 即刪除 http 結果是 www.bitedu.com 123.htm 號擷取,刪除左邊字元,...