AllowOverride None
パスがあるグループで交換したいです/var/www/
。これにはsedを使用していますが、すべての一致を置き換えます。
Apache2.confスクリプトを実行する前に
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Apache2.confスクリプトを実行した後
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
スクリプトファイル
#!/bin/bash
sed "s/AllowOverride None/AllowOverride All/g" apache2.conf
私の質問は次のとおりですsedに交換するようにどのように言いますか/var/www/
?
ベストアンサー1
これを達成するには、次のPerl onelinerを使用できます。
perl -0777 -pe 's{(<Directory\s/var/www/.*?AllowOverride\s)None(.*?</Directory>)}{$1All$2}gs' /tmp/file
この-0777
フラグは行区切り文字をundefに変更するため、perlはファイルを1行に読み込みます(大容量ファイルでは問題になる可能性があります)。
-p
ファイル行を繰り返し印刷し、
-e
スクリプト、
/tmp/file
構成ファイルを実行します。
s{(<Directory\s/var/www/.*?AllowOverride\s)None(.*?</Directory>)}{$1All$2}gs
/var/www の 2 つの部分で構成されるディレクトリセクションと一致し、デフォルトで None を All に置き換える正規表現です。 Perlでは、ほぼすべてのシンボルを正規表現の区切り文字として使用できます。この場合{}
は//
。