常連の読者であるラジャンさんからの質問です。彼は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に出力されます ファイルは変更されません!