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