内部の複数行文字列置換タグ

内部の複数行文字列置換タグ

ディレクトリへの上書きをhttpd.conf許可するようにファイルを変更しようとしています。/var/www/html単純化のために、次のように仮定しましょう。

<Directory "/var/www/html">
    # Comment
    AllowOverride none
    # Comment
</Directory>

AllowOverride noneと交換してみてくださいAllowOverride All

私は次のことを試しました:

sed -i 's/\(Directory \"\/var\/www\/html\">.*?\)AllowOverride none\(.*?<\/Directory>\)/\1AllowOverride all\2/' httpd.conf

私はいくつかの行をキャプチャするようには思えなかったので、正規表現修飾子などの他のいくつかの操作を試しました。https://www.gnu.org/software/sed/manual/html_node/Text-search-across-multiple-lines.html ただし、必須文字列は一致できません。

この仕事をどうしますか? sed以外のソリューションも大歓迎です。

ベストアンサー1

私はあなたが望むものは他の場所ではなく、そのAllowOverride noneブロック内の特定のコンテンツを置き換えることであると仮定します。<Directory "/var/www/html">私たちはできます。

簡潔なバージョン:

sed -i '/^<Directory "\/var\/www\/html">/,/^<\/Directory>/ {
    s/AllowOverride none/AllowOverride all/;
}' httpd.conf

これは、代替コマンドが指定された行間にのみ適用されることを意味します。

まず、ファイルをバックアップしてからdiffもう一度バックアップして、必要なファイルがあることを確認してください。 :)

おすすめ記事