Linux 使用带有sed的bash脚本修改文件
与这些问题类似:Linux 使用带有sed的bash脚本修改文件,linux,bash,sed,Linux,Bash,Sed,与这些问题类似: 在这样的文件中: define('_DB_NAME_', 'anything'); define('_DB_USER_', 'something else'); define('_DB_PASSWD_', 'and another value'); 如何使用sed通过引用键值\u DB\u NAME\u,\u DB\u USER\u和\u DB\u PASSWD,来替换值任何东西,某物和另一个(未知) sed -i -e 's/anything/newanything
define('_DB_NAME_', 'anything');
define('_DB_USER_', 'something else');
define('_DB_PASSWD_', 'and another value');
如何使用sed通过引用键值\u DB\u NAME\u
,\u DB\u USER\u
和\u DB\u PASSWD
,来替换值任何东西
,某物
和另一个
(未知)
sed -i -e 's/anything/newanything/g;s/something/newthing/g;s/another/newanother/' tempfile
其中tempfile包含您拥有的代码。输出如下所示
define('_DB_NAME_', 'newanything');
define('_DB_USER_', 'newthing else');
define('_DB_PASSWD_', 'and newanother value');
其中tempfile包含您拥有的代码。输出如下所示
define('_DB_NAME_', 'newanything');
define('_DB_USER_', 'newthing else');
define('_DB_PASSWD_', 'and newanother value');
您可能想要:
sed -E "
s/('_DB_NAME_', ')[^']+/\1ABC/
s/('_DB_USER_', ')[^']+/\1DEF/
s/('_DB_PASSWD_', ')[^']+/\1GHI/
"
我认为awk更具可读性:
awk -F "'" -v OFS="'" '
$2 == "_DB_NAME_" {$4 = "ABC"}
$2 == "_DB_USER_" {$4 = "DEF"}
$2 == "_DB_PASSWD_" {$4 = "GHI"}
{print}
'
您可能想要:
sed -E "
s/('_DB_NAME_', ')[^']+/\1ABC/
s/('_DB_USER_', ')[^']+/\1DEF/
s/('_DB_PASSWD_', ')[^']+/\1GHI/
"
我认为awk更具可读性:
awk -F "'" -v OFS="'" '
$2 == "_DB_NAME_" {$4 = "ABC"}
$2 == "_DB_USER_" {$4 = "DEF"}
$2 == "_DB_PASSWD_" {$4 = "GHI"}
{print}
'
另外两个也一样
如果您想就地更改文件,可以使用-i
,但必须小心,不同版本的sed处理方式不同
另外两个也一样
如果您想就地更改文件,可以使用
-i
,但必须小心,不同版本的sed处理方式不同。您想替换第一行的第二个参数,还是替换出现的'anything'
参数?我想替换值anything
(未知)根据键\u DB\u NAME
是否替换第一行的第二个参数,还是替换出现的'anything'
参数?我要替换值anything
(未知)根据键\u DB\u NAME\u
我编辑了我的问题以保持清晰。值anything
未知。因此目标是通过引用\u DB\u NAME\u
@francoisromain来替换它。啊,我知道了,对不起,我在这里跳了一点枪。为了清晰起见,我编辑了我的问题。值anything
未知。因此目标是重新编辑请参考\u DB\u NAME\u
@francoisromain啊,我很抱歉我在这里跳了一点枪。第一个使用sed的说:\1在RE中没有定义-r
尝试使用-r
而不是-E
。你在使用什么操作系统?现在它在macos上,但最终它将在linux上运行(我不太清楚,它是一个运行apache的共享主机)第一个使用sed的主机说:\1在RE
中没有定义尝试使用-r
而不是-E
。你使用的是什么操作系统?现在它在macos上,但最终将在linux上运行(我不太清楚,它是一个运行apache的共享主机)