sedを使用して特定のテキストファイルのLinuxパスを置き換える方法

sedを使用して特定のテキストファイルのLinuxパスを置き換える方法

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

sedGNUコマンドには他の区切り文字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 

g1行に複数の一致が期待されていないため、この修飾子はここでは役に立ちません。

移植性のために:

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

しかし、より良い答えを得ることができます。

関連情報