特定のテキストが見つかったら、タグ間にテキストを印刷します(含む)。

特定のテキストが見つかったら、タグ間にテキストを印刷します(含む)。

私の使命は、複数のApacheサーバーからデータを抽出することです。タスクは、次を印刷することです。

<Directory ...>
  ...
</Directory>

+ExecCGIがあるところです。説明するために例を挙げましょう。 Apache設定ファイルに次のような多くのディレクトリセクションがあるとします。

<Directory /var/www/site1/htdocs>
  Options +ExecCGI
  ...
  ...
</Directory>
...
...
...
<Directory /var/www/site1/Promo>
  Options -ExecCGI
  ...
  ...
</Directory>

上記では、次のような出力が必要です。

<Directory /var/www/site1/htdocs>
  Options +ExecCGI
  ...
  ...
</Directory>

フォーラムを検索した結果、人々がラベルの間にセクション全体を印刷する方法(私もその方法を知っています)や、発見時にいくつかのテキストを変更する方法(この時点でもどうするかを知っています)について質問する投稿を見つけました。 。

+ExecCGIを-ExecCGIに変更します。ただし、変更はレビュープロセスを経る必要があるため、この質問からこのデータを抽出できます。

ベストアンサー1

perl -l -0777 -ne 'for (m{<Directory.*?</Directory>}gs) {print if /\+ExecCGI/}'

またはGNUを使用してくださいgrep

grep -zPo '(?s)<Directory(?:.(?!</Directory))*?\+ExecCGI.*?</Directory>'

おすすめ記事