Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用带有sed的bash脚本修改文件_Linux_Bash_Sed - Fatal编程技术网

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的共享主机)