次のコマンドの一部が混乱します。
awk '/<Directory \/>/,/AllowOverride None/{sub("None", "All", $0)}{print}' /etc/apache2/apache2.conf > myfile.txt
このコマンドは
<Directory />
AllowOverride None
</Directory>
そして
<Directory />
AllowOverride All
</Directory>
Apache設定で更新された設定を作成しますmyfile.txt
。
このコマンドがファイルの2行でパターンマッチングを実行する方法はわかりません。国境を越える作業の例が見つかりません。のカンマに関連しているようですが、/<Directory /\>,/AllowOverride
正確に何が起こっているのか理解したいと思います。このパターンマッチングはファイルの2行でどのように実行されますか?
また、なぜ必要ですか{print}
?デフォルトでは結果が印刷されませんかawk
?
答え1
/<Directory \/>/,/AllowOverride None/
(この行の間に)sub( ... )
None
交換しますAll
{print}
すべての行には(交換するかどうか)が必要です。
with行はAllowOverride None
asub
とaを取得し、他のすべてのprint
行は印刷されます。
サンプルファイル:
<Directory />
## we don't want None
AllowOverride None
## all or None-thing
</Directory>
なります
<Directory />
## we don't want All
AllowOverride All
## all or None-thing
</Directory>
デフォルト値に関しては、次の点を考慮してください。
... | awk 'NF==7'
デフォルトでは7つのフィールドを持つ行を印刷しますが、あなたの場合、サブ機能はデフォルトをオーバーライドするため、他のアクションは実行されません。これが明示的な印刷が必要な理由です(明示的な印刷を削除しても何も出力されません)。