我正在远离AMPPS / MAMP,并希望尽可能靠近生产环境构建开发环境。
因此,我在安装了CentOS 6.4 64位操作系统盒的Mac上使用Vagrant / VirtualBox。
在我的vagrant文件中,我有一个配置脚本:
config.vm.provision :shell, :path => "bootstrap.sh"
目前,我的bootstrap.sh看起来如下:
#!/usr/bin/env bash
# Install the remi repos
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# Update the repositories
sudo yum -y update
sudo yum -y --enablerepo=remi,remi-php55 install php-pecl-apc php-cli php-pear php-pdo php-mysqlnd php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
现在我安装了我的apache服务器,我希望我的bash脚本编辑/etc/httpd/conf/httpd.conf
文件并在我的html目录中将AllowOverride None
更改为AllowOverride All
。
<Directory "/var/www/html">
...
Options Indexes FollowSymLinks
...
# Need to change this to AllowOverride All via bash script
AllowOverride None
...
Order allow,deny
Allow from all
</Directory>
答案 0 :(得分:3)
这是一个很好的oneliner:
sed "$(grep -n "AllowOverride None" input.file |cut -f1 -d:)s/.*/AllowOverride All/" input.file > output.file
细分:
grep -n "AllowOverride None" input.file
返回与模式匹配的行,前面是行号cut -f1 -d:
剪切字符串并返回遇到的第一个数字sed "$LINE_NUMBERs/.*/AllowOverride All/" input.file
将“AllowOverride All”放在第$LINE_NUMBER
行然后您只需将输出重定向到所需的文件。
Et瞧!
答案 1 :(得分:0)
使用Linux SED命令搜索并替换两个模式之间的线
另一个不错的解决方案是使用SED命令搜索并替换两个模式之间的线。在您的情况下,模式将是:
'<Directory "/var/www/html">' and </directory>'
通过这种方式,您只替换了html目录(<Directory "/var/www/html">)
中的'AllowOverride None'行,而不替换httpd.conf文件中包含'AllowOverride None'的每一行。
SED命令支持以下格式的模式范围:
sed '/startpattern/,/endpattern/ <sed-commands>' file
在您的情况下,它将变为:
sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' /etc/httpd/conf/httpd.conf
-i选项用于在适当位置编辑文件。如果您不使用-i选项,那么修改后的输出将显示在屏幕上,并且文件将不会被修改!