sed
を使用して、指定されたWordが最初に出現する前にすべてを削除するにはどうすればよいですか?
私がこれまでに試したこと:
echo $(cat /etc/nginx/sites-enabled/default | sed 's/^*.server/server/') > /etc/nginx/sites-enabled/default
最初の「サーバー」Wordを見つける前に、すべてのゴミをクリーンアップする必要があります。
主にsed
正規表現が必要です...
スクリプトがDockerコンテナにコピーしている間に先行スペースを取得しているプロキシ情報を含むNginxのデフォルトファイルがあります。何らかのコマンドで削除する必要があります。
ファイル:
server
{
listen 80 default_server;
location /
{
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:5000;
}
}
どのようなキャラクターがいるのかわからないので、「サーバー」の前にすべてを削除したいと思います。
次の単純なコマンドを使用して、行の先頭とWordの「サーバー」の間の空白文字(タブ、スペースなど)をすべて削除します(空白以外に何もない場合のみ)。
sed -i 's/^\s*server/server/' FILENAME
-i
オプションは、ファイルをインプレースで変更します。つまり、すべての変更がすぐに適用および保存され、出力は取得されません。ファイルを書き換えずに、変更された新しいバージョンを表示したくない場合は、-i
オプションを省略すると、コマンドはそれをSTDOUT(標準出力ストリーム)に出力します。
正規表現^\s*server
を使用して、行の先頭とWordの "server"の間の任意の種類の空白と一致させ、それらの一致をWordの "server"自体に置き換えます。
GNU sedには特別な形式の範囲アドレス0,/pattern/
があり、ファイル内で最初に出現するpattern
のみを照合できます。
sed '0,/server/ s/^.*server/server/' /etc/nginx/sites-enabled/default
または(マッチが行の先頭にも固定されるため、おそらくより良い)
sed '0,/^.*server/ s//server/' /etc/nginx/sites-enabled/default
最初に試してから-i
(インプレース)フラグを追加するか、バックアップ-i.bak
を使用してください