我想添加这段代码
$cfg['Servers'][$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin)$';
进入 phpMyAdmin 的配置文件.inc.php文件前线
/**
* End of servers configuration
预期结果:
$cfg['Servers'][$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin)$';
/**
* End of servers configuration
*/
这是样本配置文件.inc.php文件 (https://github.com/phpmyadmin/phpmyadmin/blob/master/config.sample.inc.php)
我现在的sed
代码在.sh文件是
#!/bin/sh
PHPMATARGETDIR="/var/www/phpmyadmin"
sudo sed -i "s/\(\/\*\*\)/ #my code before;\n\1/" ${PHPMATARGETDIR}/config.inc.php
但它不起作用,它只是添加到所有打开的评论块之前。
如果我使用这段代码,那么它根本不起作用。
sudo sed -i "s/\(\/\*\*\n\s*\* End of servers configuration\)/ #my code before;\n\1/" ${PHPMATARGETDIR}/config.inc.php
答案1
你可以在 sed 中执行此操作:
sed "/\/\*\*/{
N
/ \* End of servers config/i\
\$cfg['Servers'][\$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin)\$';
}" config.inc.php
请注意,您提供的config.inc.php
实际上包含
/*
* End of servers configuration
*/
没有双星号 -/\/\*/
简单地制作第一个表达式和第二个表达式可能会更安全/End of servers config/
答案2
对我来说,解决方案是使用 perl bash从这里和这个参考。
PHPMATARGETDIR="/var/www/phpmyadmin"
ADDPMACONFIG="\$cfg['Servers'][\$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin|sys)\$';"
ADDPMACONFIG=$(printf '%s\n' "$ADDPMACONFIG" | sed -e 's/[]\/$*.|()^[]/\\&/g')
sudo perl -0777 -i -p -e "s/(\/\*\*\n\s+\*\s+End of servers configuration.*)/${ADDPMACONFIG}\n\1/" ${PHPMATARGETDIR}/config.inc.php