2017-11-10 15 views
0

私の開発環境の設定は、/ etc/hostファイルのlocalIPエントリにある特定のホスト名を必要とするようなものです(理由は複数のマイクロサービスとストレージ、つまりCassandraとRedis - ホスト名へのバインド) 私はこの単純なbashスクリプトこのAlthroughsedコマンドは変数を使ってIPアドレスを置き換えません

newIP=`ip a | grep wlp5s0 | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | head -1` 
echo $newIP 
oldIP=`ping -q -c 1 -t 1 dummy | grep PING | sed -e "s/).*//" | sed -e "s/.*(//"` 
echo $oldIP 
sed -i 's/$oldIP/$newIP/g' /etc/hosts 

が正しいIPを印刷しているが、交換が が起きていない、SEDが、わからない

答えて

2

の問題として、私には見えます作成しましたsedコマンドを次のように変更してください。

sed -i "s/$oldIP/$newIP/g" /etc/hosts 

あなたは、単純な引用符を使用する場合は、「'」あなたの変数は、その値によって置き換えられません!

あなたは次の方法でも、あなたの最初の正規表現を編集することができます少なくとも

\b(\d{1,3}\.){3}\d{1,3}\b 

最後のではなく、あなたが悪い驚きを避けるために、インプレースモードでのsedを使用する前に、あなたの/etc/hostsファイルのバックアップを取る必要があります。

希望すると助かります!

+2

おそらく 'sed -i.bak" s/$ oldIP/$ newIP/g "/ etc/hosts'を使用していますか? –

+0

答えをいただきありがとうございます。これは正規表現の変更を利用することもできます。 – Count

+1

正規表現はよりコンパクトです。 同じ動作のために書くことが少なくて済む - >生産性が向上し、あなたの指、目にとってより良い。 :-) パフォーマンスの面では、\ dを使用する方が良いですが、正規表現の文字列が小さくなると分かりません(メモリ消費量はほとんどありません) – Allan

関連する問題