在 Mac 上使用 sed
命令和 linux 上會有一定區別,在此作為記錄。
不可忽略的備份格式
sed -i 's/hello/world/g' hello.text
上面這行代碼,可以在 linux 上運行,作用是將找到的 hello
替換為 world
,並且直接保存修改到文件。但是如果在 Mac 上,你會發現這行代碼會報錯。原因是在 Mac 上,sed
命令直接操作文件的時候,必須指定備份的格式,而在 linux 上,卻並沒有這個要求。
sed -i '' 's/hello/world/g' hello.php
如上面的代碼所示,在 -i
之后加上一對引號,來指定備份格式,如果不需要備份,引號里的內容可以為空。
插入文本需要換行
sed -i '' '1i\ hello ' hello.php
上面這行代碼,作用是往文件中插入 hello
,在 linux 下可以正常運行,但是在 Mac 上,啊哦,報錯。原因是使用 sed
命令往文件中插入文本時,必須在 1i
后面插入一個換行符正確代碼如下。例如你要在終端使用此命令,正確代碼如下,在 1i
后,敲個回車,然后繼續輸入后面的命令。
sed -i '' '1i\ hello' hello.php
因為我是使用 ruby 來調用 shell 腳本,因此會將命令寫在字符串中,在 ruby 中使用 sed
插入文本的代碼如下。
system "sed -i '' '1i\\'$'\n''hello' hello.php"