GNU/Linux >> Linux の 問題 >  >> Linux

Sedを使用してパターン範囲間の行を検索および置換

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


Linux
  1. Sed、Awk、またはGrepを使用したマルチラインパターンマッチ?

  2. Sedを使用してパターンマッチ後に前の行を印刷しますか?

  3. カスタム正規表現区切り文字を使用してパターンを含む行番号を見つけますか?

  1. 同じ行の2つの検索パターン間で値を抽出しますか?

  2. Sedは改行文字を置き換えることができますか?

  3. 実行する前に再帰的なSed検索をテストして置き換えますか?

  1. Linuxでsedを使用してテキストファイルを検索および置換する

  2. コマンドラインを使用してディレクトリ内のファイルの数を取得するにはどうすればよいですか?

  3. sed を使用して特定のパターンを置き換える