sedで変数を使用すると、一致する文字列だけでなく行全体を置き換えます。

sedで変数を使用すると、一致する文字列だけでなく行全体を置き換えます。

私は初めてbashに触れ、他の同様の投稿を理解しようとしましたが、彼らが私が必要とすることをしているかどうかはわかりません。

変数を使わずに検索して置き換えたい内容だけを入力するとうまくいきます。ただし、変数を渡すと、スクリプトは "host1"文字列も削除します。このセクションの前には、「host1」を含むファイルを探すforループがあります。 arg1、2、3 は $1、$2、$3 です。

input="$f"   

while read -r line  
 do  
 sed "/"$arg2"/ s=192.168.10.*="$arg3"="  

done < "$f"

「host1」文字列を含む行のIPを置き換えたいです。

10.10.10.10 host1 

答え1

$arg2に設定されているとhost1仮定$arg3すると、10.10.10.10両方のコマンドがsed出力から削除されます。host1

問題は一致するため、192.168.10.*最後.*の項目が行の最後まで一致し、に置き換えられることです10.10.10.10

努力する:

arg2=host1
arg3=10.10.10.10
sed "/${arg2}/ s/192\.168\.10\.[0-9]\+/${arg3}/" /path/to/file 

関連情報