【发布时间】:2017-05-08 03:48:17
【问题描述】:
使用 bash 脚本,我正在尝试编辑 Magento 2 env.php 配置文件。 bash 脚本首先执行一些其他操作。 需要在 11-14 行的 config 文件中修改这部分:
'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 文本编辑器中执行“搜索和替换”,我最终通过引用行号并尝试添加 sed 删除了“会话”的旧内容使用 awk 正确的内容。我已经尝试在每个句子的末尾使用反斜杠。 这是我用 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
我的猜测是我没有正确退出,但许多 Google 搜索都没有找到解决方案。
这是使用 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
我还尝试了其他一些尝试来解决我仅使用 sed 所面临的问题,但不幸的是我没有保存这些,但是它们也没有工作。
有人知道我该如何解决这个问题吗?
编辑:我正在尝试在 Debian 9 "Stretch" 上执行此编辑
编辑 2:根据我在这里收到的反馈,我在这里重新表述了这个问题:Find and replace multiple lines of text from command line
【问题讨论】:
-
欢迎来到 Stack Overflow。并祝贺你的第一个问题。也许你想做的是stackoverflow.com/questions/16715373/…