使用终端中的sed替换文件中的文本

使用终端中的sed替换文件中的文本,sed,terminal,command,Sed,Terminal,Command,我在此文件中有以下文本: test.php $databases = array ( 'default' => array ( 'default' => array ( 'database' => 'original', 'username' => 'root', 'password' => 'root', 'host' => 'localhost' ), ), ); 在

我在此文件中有以下文本:

test.php

$databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'database' => 'original',
      'username' => 'root',
      'password' => 'root',
      'host' => 'localhost'
    ),
  ),
);
在终端运行此线路,将“原始”替换为“新”

sed -i 's/original/new/g' test.php
更新:错误消息为:

sed:1:“test.php”:未定义的标签“est.php”

有什么问题

更新2:

如果我只是跑:(我删除了“-I”)

我看到文件文本在终端中被修改。但是文件不会保存。

在BSDish平台(包括Mac OSX)上,
-i
选项需要一个参数

sed -i '' 's/original/new/g' test.php

请注意空参数
'

,它不太可能通过发出
sed-i's/original/new/g'test.php来获得您提到的错误消息。你使用了什么命令?我发现问题可能是'-I'的重复。如果我只运行'sed's/original/new/g'test.php'(我删除了'-I'),它会工作,但文件不会保存。顺便问一下:为什么要进行向下投票…?@devnull我只是复制/粘贴命令。非常确定。如果您不希望在一行上有多个匹配项,那么
/g
标志是多余的。相关:可移植执行
sed-i
的选项:
sed -i '' 's/original/new/g' test.php