0

シナリオ: sed を使用して httpd 構成ファイルの大部分を変更しようとしています。

私が試したこと:

read -d '' _OLD <<"EOF"
<Directory "/var/www/html">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None
EOF

read -d '' _NEW <<"EOF"
<Directory "/var/www/html">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All
EOF

echo -n ${_OLD}
echo -n ${_NEW}
sed -i "s/$_OLD/$_NEW/g" /etc/httpd/conf/httpd.conf

変更された唯一の点に気付いた場合はAllowOverride All、ルールを変更したいだけ/var/www/htmlで、他のインスタンスでは変更したくないので、そのブロック全体を調べているのです。

私が達成しようとしていることを行うには、おそらくもっと良い方法があることを知っています。方向性は大歓迎です。

4

3 に答える 3

2
sed -r '\%<Directory "/var/www/html">%,\%</Directory>% s%(AllowOverride)\s+None%\1 All%i'
于 2013-02-08T02:33:08.287 に答える
1

さて、私の(時代遅れの)バージョンsed

sed "s/lifetime/birth\
…\
death/"

…それで、1 つまたは 2 つの問題があります。もう 1 つは/、パターンと置換にスラッシュが含まれているにもかかわらず、区切り文字として使用していることです。

正規表現アドレスを使用することをお勧めします。

sed '/<Directory "\/var\/www\/html">/,/AllowOverride/s/AllowOverride None/AllowOverride All/'

つまり、行と次行のs/AllowOverride None/AllowOverride All/の該当する行で置換を行います。(最初の正規表現の引用符に注意してください。) <Directory "/var/www/html"> AllowOverride

于 2013-02-08T02:24:44.057 に答える
0

正規表現を使用しないのはなぜですか? Sed はそれらをネイティブにサポートします。 詳細はこちら

于 2013-02-08T02:20:26.350 に答える