私は初めて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