Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
使用sed、awk或其他工具从bash脚本编辑php env.php_Bash_Awk_Sed_Replace - Fatal编程技术网

使用sed、awk或其他工具从bash脚本编辑php env.php

使用sed、awk或其他工具从bash脚本编辑php env.php,bash,awk,sed,replace,Bash,Awk,Sed,Replace,使用bash脚本,我试图编辑Magento 2 env.php配置文件。 bash脚本首先执行一些其他操作。 它需要在第11-14行的配置文件中更改此部分: 'session' => array ( 'save' => 'files', ), 为此: 'session' => array ( 'save' => 'redis', 'redis' => array ( 'host' =>

使用bash脚本,我试图编辑Magento 2 env.php配置文件。 bash脚本首先执行一些其他操作。 它需要在第11-14行的配置文件中更改此部分:

  'session' => 
  array (
    'save' => 'files',
  ),
为此:

'session' => 
   array (
   'save' => 'redis',
   'redis' => 
      array (
        'host' => '127.0.0.1',
        'port' => '6379',
        'password' => '',
        'timeout' => '2.5',
        'persistent_identifier' => '',
        'database' => '0',
        'compression_threshold' => '2048',
        'compression_library' => 'gzip',
        'log_level' => '1',
        'max_concurrency' => '6',
        'break_after_frontend' => '5',
        'break_after_adminhtml' => '30',
        'first_lifetime' => '600',
        'bot_first_lifetime' => '60',
        'bot_lifetime' => '7200',
        'disable_locking' => '0',
        'min_lifetime' => '60',
        'max_lifetime' => '2592000'
    )
  ),
'cache' =>
array(
   'frontend' =>
   array(
      'default' =>
      array(
         'backend' => 'Cm_Cache_Backend_Redis',
         'backend_options' =>
         array(
            'server' => '127.0.0.1',
            'database' => '0',
            'port' => '6379'
            ),
    ),
    'page_cache' =>
    array(
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
       array(
         'server' => '127.0.0.1',
         'port' => '6379',
         'database' => '1',
         'compress_data' => '0'
       )
    )
  )
),
我曾尝试使用各种方法实现sed和awk,并且已经花了好几个小时,但我无法找出我做错了什么。我以前没有使用sed、awk或shell脚本的经验。在我无法实现我真正想要的,在每个GUI文本编辑器中都可以执行的“搜索和替换”之后,我最终通过引用行号并尝试使用awk添加正确的内容来删除sed的旧内容。我已经试过在每句话的结尾使用反斜杠了。 这是我用sed和awk编写的脚本,在第一次尝试使用以下方法正确实现这一点之后:

sed -i -e 12d -e 13d -e 14d /var/www/ecom/app/etc/env.php
awk '
{ print }
/  'session' => / {
print "  array ( "
print "  'save' => 'redis',"
print "  'redis' =>"
print "     array ("
print "       'host' => '127.0.0.1',"
print "       'port' => '6379',"
print "       'password' => '',"
print "       'timeout' => '2.5',"
print "       'persistent_identifier' => '',"
print "       'database' => '0',"
print "       'compression_threshold' => '2048',"
print "       'compression_library' => 'gzip',"
print "       'log_level' => '1',"
print "       'max_concurrency' => '6',"
print "       'break_after_frontend' => '5',"
print "       'break_after_adminhtml' => '30',"
print "       'first_lifetime' => '600',"
print "       'bot_first_lifetime' => '60',"
print "       'bot_lifetime' => '7200',"
print "       'disable_locking' => '0',"
print "       'min_lifetime' => '60',"
print "       'max_lifetime' => '2592000'"
print "   )"
print " ),"' /var/www/html/app/etc/env.php
然而,我得到的结果是:

awk: cmd. line:27: print " ), "
awk: cmd. line:27:             ^ unexpected newline or end of string
我的猜测是,我没有正确退出,但大量的谷歌搜索并没有找到解决方案

这是使用cat和sed的另一次尝试,它也不起作用,并导致一个空文件:

cat <<EOF <(sed -i '1,/  'session' => \n  array (\n    'save' => 'files',\n  ),/d' /var/www/html/app/etc/env.php) >> /var/www/html/app/etc/env.php
'session' =>
   array (
   'save' => 'redis',
   'redis' =>
      array (
        'host' => '127.0.0.1',
        'port' => '6379',
        'password' => '',
        'timeout' => '2.5',
        'persistent_identifier' => '',
        'database' => '0',
        'compression_threshold' => '2048',
        'compression_library' => 'gzip',
        'log_level' => '1',
        'max_concurrency' => '6',
        'break_after_frontend' => '5',
        'break_after_adminhtml' => '30',
        'first_lifetime' => '600',
        'bot_first_lifetime' => '60',
        'bot_lifetime' => '7200',
        'disable_locking' => '0',
        'min_lifetime' => '60',
        'max_lifetime' => '2592000'
    )
  ),
'cache' =>
array(
   'frontend' =>
   array(
      'default' =>
      array(
         'backend' => 'Cm_Cache_Backend_Redis',
         'backend_options' =>
         array(
            'server' => '127.0.0.1',
            'port' => '6379'
            ),
    ),
    'page_cache' =>
    array(
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
       array(
         'server' => '127.0.0.1',
         'port' => '6379',
         'database' => '1',
         'compress_data' => '0'
       )
    )
  )
),
EOF
cat>/var/www/html/app/etc/env.php
“会话”=>
排列(
“保存”=>“redis”,
“redis”=>
排列(
“主机”=>“127.0.0.1”,
“端口”=>“6379”,
'密码'=>'',
“超时”=>“2.5”,
“持久标识符”=>“”,
“数据库”=>“0”,
“压缩阈值”=>“2048”,
“压缩库”=>“gzip”,
“日志级别”=>“1”,
“最大并发”=>“6”,
“前端后中断”=>“5”,
'在\u adminhtml'=>'30'之后中断\u,
“第一个生命周期”=>“600”,
“机器人第一次生命周期”=>“60”,
“机器人寿命”=>“7200”,
“禁用锁定”=>“0”,
“最小寿命”=>“60”,
“最大使用寿命”=>“2592000”
)
),
“缓存”=>
排列(
“前端”=>
排列(
“默认值”=>
排列(
'backend'=>'Cm\u Cache\u backend\u Redis',
“后端_选项”=>
排列(
'服务器'=>'127.0.0.1',
“端口”=>“6379”
),
),
“页面缓存”=>
排列(
'backend'=>'Cm\u Cache\u backend\u Redis',
“后端_选项”=>
排列(
'服务器'=>'127.0.0.1',
“端口”=>“6379”,
'数据库'=>'1',
“压缩数据”=>“0”
)
)
)
),
EOF
我还尝试用sed来解决我面临的这个问题,但不幸的是我没有保存它们,但是它们也不起作用

有人知道我怎么解决这个问题吗

编辑:我试图在Debian 9“Stretch”上执行此编辑


编辑2:根据我在这里收到的反馈,我在这里重新表述了这个问题:

如果您可以使用GNU
sed
,您可以将文本放入文件中,并用
r
命令替换有问题的行。如果你不能,你需要修正你的报价。或者,您可以使用以下内容:

{ sed 11q old_file; cat replacement_text; sed 1,14d old_file; } > new_file

欢迎来到堆栈溢出。祝贺你提出第一个问题。也许你想做的是@TobySpeight不,因为你总是大错特错。我看到在你最近的12个答案中,你只有1个被接受-也许如果你更多地关注你的答案而不是其他人,你就能为网站贡献更多?谢谢你的答案。虽然我宁愿使用搜索功能来替换我要替换的文本块,但这个解决方案似乎确实有效。通过这样做:awk'NR==FNR{new=new$0 ORS;next}FNR==11{printf“%s”,new;f=1}!f FNR==14{f=0}replacement.txt oldfile.php>newfile.php我可以保存它,但是,如果我最后一行使用这句话:“replacement.txt oldfile.php>oldfile.php直接编辑而不是写入新文件,它会导致一个空文件。这可能很简单,但你知道如何解决这个问题吗?
我宁愿使用搜索功能来替换我要替换的文本块
-这很容易做到,但是你告诉我们你要替换的行号,这真的让我们吃了一惊。如果您想基于匹配字符串而不是行号进行替换,为什么要这样做?是的,UNIX命令将其输出打印到stdout,如果您想将stdout重定向到一个文件,那么您可以使用
执行此操作。好吧,我可能应该更清楚一些,对此表示抱歉。这是我在使用搜索功能苦苦挣扎了两个小时后尝试的。我文章中的最后一个代码块是尝试使用搜索和替换,但不幸的是它不起作用。谢谢你的快速回复。我将尝试合并这一变化!
{ sed 11q old_file; cat replacement_text; sed 1,14d old_file; } > new_file