NGINXの設定方法に関するいくつかのドキュメントにいくつかのコマンドを書いています。私は「viで開く」と書いて、誰かがそのすべてを知ることを期待したくありません。私はこのsedコマンドを実行するように言います。
sedを使ったのは今回が初めてです。
ファイルにエントリが含まれています。
server {
{{{{{{OTHER STUFF}}}}}}}
root /var/www/html;
{{{{{{MORE STUFF}}}}}}
}
/var/www
に交換して削除したいですhtml
。
スラッシュとネストで苦労しています。ファイルに「root」という単語が異なる場合もあります。
これはうまくいきません
sed -i 's//var/www/html//var/www/g' default
答え1
sed
GNUコマンドには他の区切り文字sed
が許可されています。それ以外の場合は、パターンに表示されない区切り文字を使用できます。/
エスケープするか、他の特殊文字を使用する必要があります。。
sed 's% /var/www/html% /var/www%' default
さらに、最新のGNUはsed
オプションを使用するときの内部置換をサポートしています-i
。 MACおよびFreeBSDユーザーの場合-i ''
。
また、この-i.back
オプションを使用してファイルのコピーを作成するバックアップを取得することもできますdefault.back
。
答え2
sed
すべての文字をパターン区切り文字として使用できます。
sed -i 's#root /var/www/stuff#root /var/www#' somefile
g
1行に複数の一致が期待されていないため、この修飾子はここでは役に立ちません。
移植性のために:
sed 's#root /var/www/stuff#root /var/www#' somefile >newfile && mv newfile somefile
ドキュメントの場合は、「エディタでこの行を変更してください」と言ってください。 nginxを設定する場合は、エディタの使い方を知っておく必要があります。
通常、構成ファイルの内容を変更した場合(ワンタイム編集の場合)、手動で実行するとエラーが発生する可能性が低くなります。これにより、正しく組み立てられていない正規表現が制御範囲外になり、意図しない方法で内容を変更するリスクがなくなります。
答え3
sed -i 's/\/var\/www\/html/\/var\/www/g' filename.txt
しかし、より良い答えを得ることができます。