4

http.confファイルに次のようなブロックがあります。

<IfModule mime_module>
    ...
</IfModule>

bashを使用していると仮定すると、次の行があるかどうかを確認するにはどうすればよいですか?

AddHandler application/x-httpd-php .php

前のブロック内にすでに追加されていますが、追加されてい
ない場合は、どのようにして下部に追加できますか?

<IfModule mime_module>
    ...
    AddHandler application/x-httpd-php .php
</IfModule>

このブロックはファイルの真ん中にあります。
ファイルの内容はこのブロックで開始または終了しません。


編集:
これを難しくするために、私もさらにチェックする必要があることに気づきました:私の質問でそれを見逃して申し訳ありません。上記の行がコメント行として上記のブロック内にすでに存在する場合は、

# AddHandler application/x-httpd-php .php

(char#は行の最初の文字であるか、AddHandlerのchar Aの前にスペースがある場合とない場合があるため、前にスペースがある場合があります)、コメントを外す必要があります。それ以外の場合は、追加に進みます。説明されているように。

4

3 に答える 3

7
awk '
/mime_module/{
    flag=1
}

flag && /x-httpd-php/{
    has=1
}

flag && /<\/IfModule>/{
    flag = 0
    if(!has)
        print "AddHandler application/x-httpd-php .php"
}
1' input.conf
于 2012-04-10T16:24:34.370 に答える
2

これはあなたのために働くかもしれません:

sed -i ':a;$!N;/^<IfModule mime_module>.*<\/IfModule>/{s/# *\(AddHandler application\/x-httpd-php \.php\)/\1/;/AddHandler application\/x-httpd-php \.php/!s/.*\n/&\n    AddHandler application\/x-httpd-php .php\n/;p;d};/^<IfModule mime_module>/ba;P;D' input.conf
于 2012-04-10T18:47:12.697 に答える
0

以下は、ブロック "IfModule - /IfModule" 内のすべてをテキスト "AddHandler application/x-httpd-php .php" に置き換えます。したがって、コメント (#) が見つかった場合でも、何も見つからなかった場合でも、ブロックには正しい情報が含まれます。

また、これはインライン編集であることに注意することも重要です。変更したいファイルは、このスクリプトを NO BACKUP MADE で実行するとすぐに変更されます。何かをテストする前に、ファイルをバックアップしてください。

sed -i '/<\/IfModule>/,/<IfModule>/!s/    \.\.\..*/    \.\.\.\n    AddHandler application\/x-httpd-php .php/g' /yourfile

OS X で作業している場合は、代わりに次のスクリプトを試してください。

#!/bin/bash

CR="$(printf '\r')"

sed -i '' "/<\/IfModule>/,/<IfModule>/!s/    \.\.\..*/    \.\.\.${CR}    AddHandler application\/x-httpd-php .php/g" /yourfile

開始ファイルの例:

<IfModule>
    ...
</IfModule>
<NOTHING TO CHANGE>
    ...
</NOTHING TO CHANGE>
<IfModule>
    ...
#   AddHandler application/x-httpd-php .php
</IfModule>
<NO CHANGE>
    ...
    NO CHANGE
</NO CHANGE>

結果:

<IfModule>
    ...
    AddHandler application/x-httpd-php .php
</IfModule>
<NOTHING TO CHANGE>
    ...
</NOTHING TO CHANGE>
<IfModule>
    ...
    AddHandler application/x-httpd-php .php
</IfModule>
<NO CHANGE>
    ...
    NO CHANGE
</NO CHANGE>
于 2012-04-16T22:49:13.177 に答える