常連の読者であるラジャンさんからの質問です。彼はSed
を使いたいと思っています パターン範囲間の線を検索して置換します。さて、ここに彼からの質問があります。
私はVPSでいくつかのタスクを自動化するためのシェルスクリプトを書いています。たとえば、
httpd.conf
を変更したいと思いました「AllowOverrideNone」を「AllowOverrideAll」に置き換えます
特定の内にあります 。他の
ブロックに影響を与えることなく、その特定の ブロック内の行のみを置き換えるという考え方です(実際には多数ありますが、 "/ var / www /html"<を含むブロックが心配です。 / code> )。これを実行したかった理由は、
.htaccess
からのオーバーライドを許可するようにApacheを構成するのが困難だったためです。 ファイル。例:
httpd.conf
の以下のコード ファイル、パターンを検索する必要がありますAllowOverrideなしを置き換えます AllowOverride All 他のディレクトリ構造に影響を与えることなく、このディレクトリ構造内にあります。
<Directory "/var/www/html"> AllowOverride None </Directory>助けてください。
Sedを使用してパターン範囲間の行を検索および置換する
これはsed
のタスクのようです 、 sed
として この形式のパターン範囲をサポートします:
sed '/startpattern/,/endpattern/ <sed-commands>' file
したがって、Rajanの要件に従って、開始パターン
を検索する必要があります。 、終了パターン
"AllowOverride None"を見つけて、"AllowOverrideall"に置き換えます
。そのために、 sed
コマンドは以下のように使用する必要があります。
#sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf
ここで-i
オプションは、ファイルをその場で編集することです。オプション-i
を使用しない場合 、次に、変更された出力が stdout
に出力されます ファイルは変更されません!