sedでコマンドを使用する

sedでコマンドを使用する

myfile.txtこのコマンドの目的は、ファイル内のすべてのIPをサーバーのローカルIPに自動的に置き換えることです。

例:

sed -i -e 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/LOCALIP/g' myfile.txt

次のコマンドを使用して、sedからローカルIPアドレスを取得できるかどうかを知りたいです。

LOCALIP基本的に私の例をこのコマンドに置き換えたいと思います。

/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1 

答え1

二重引用符内にコマンド置換を使用できます。

sed -i -e 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/'"$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)/g" myfile.txt

一重引用符では機能しないため、一重引用符を最初に終了し、LOCALIPコマンドに二重引用符を使用します。これにより、検索モードで誤って拡張されることはありません。

答え2

次のコマンドは私にとってうまくいきます

sed "s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)/"

答え3

このコマンドを使用して問題を解決しました。

sed -i "s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/$(ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}')/" myfile.txt

関連情報