Prefácio
Há uma certa diferença entre o uso do comando sed no Mac e Linux. O principal motivo é que o formato de backup deve ser especificado no mac e é necessária a inserção de nova linha para inserir no mac.
Formato de backup não ignorável
# linux下success
sed -i 's/hello/world/g' hello.text
A linha de código acima pode ser executada no Linux, a função é substituir o hello encontrado no arquivo hello.text por world e salvar diretamente o conteúdo modificado no arquivo.
Se você executar o comando acima em um Mac, verá que esta linha de código relatará um erro. O motivo é que, no Mac, quando o comando sed manipula diretamente o arquivo, você deve especificar o formato do backup, mas no Linux, esse requisito não existe.
# mac下success
sed -i '' 's/hello/world/g' hello.php
Como mostrado no código acima, adicione um par de aspas após -i para especificar o formato do backup.Se o backup não for necessário, o conteúdo das aspas poderá estar vazio.
Inserir texto precisa de nova linha
sed -i '' '1i\ hello ' hello.txt
A função da linha de código acima é inserir um olá no arquivo, que pode ser executado normalmente no Linux, mas ainda assim reportará um erro no Mac.
O motivo é que, quando você usa o comando sed para inserir texto no arquivo, deve inserir uma quebra de linha após 1i. O código correto é o seguinte.
Por exemplo, se você deseja usar este comando no terminal, o código correto é o seguinte, após 1i, pressione enter e continue com os seguintes comandos.
sed -i '' '1i\
hello' hello.php
Como eu uso ruby para chamar o shell script, escreverei o comando na string e o código para inserir o texto usando sed no ruby é o seguinte.
system "sed -i '' '1i\\'$'\n''hello' hello.php"