sedを使用して特定の場所に文字を含む文字列を置き換える

sedを使用して特定の場所に文字を含む文字列を置き換える

次のようにnginx.confファイルがあります。

load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes  1;

events {
  worker_connections  1024;
}

stream {

  upstream redis {
    server 34.73.56.224:6379;
  }

  server {
    listen 8888 so_keepalive=on;
    proxy_pass redis;
  }
}

スクリプトを実行すると、bash swap.sh 400現在のアドレスが34.73.56.224で置き換えられるようにスクリプトを作成しようとします400。しかし、必ずしもこの数字ではありません。別のアドレスまたは redis と表示されることがあります。 。注::6379スクリプトを実行した後もまだ存在する必要があります。これが私が今持っているものです:

#!/usr/bin/env bash
PARAM=$1

sed -i'.conf' "s/server .+:/server $PARAM:/" nginx.conf

しかし、これがうまくいかない理由は、正規表現コマンドを正しく使用しないからだと思います。誰もが正しい方向に私を指すことができますか?

答え1

努力する:

sed -E -i'.conf' "s/server .+:/server $PARAM:/" nginx.conf

デフォルトでは、sedは次のものを使用します。基本正規表現(着替え)。 BREでは、aは文字通りプラス+記号です。したがって、後にプラス記号()が続く.+すべての文字が一致します。.

あなたは何か他のものが欲しい:あなたは.+一致したいです1つ以上.任意の文字と一致し、それを+表す任意の文字1つ以上。これを得るには必要です拡張正規表現(むしろ)。 -EsedにEREを使用するように指示します。

関連情報