文字列をコマンド出力に置き換えるには?

文字列をコマンド出力に置き換えるには?

hostname -i私が実行して次のような結果が得られたとしましょう。

root@linux:/# hostname -i
192.168.1.1
root@linux:/#

出力(IPアドレスのみ)をパイピングして、特定のファイルの特定の文字列をどのように置き換えることができますか?

このコマンドの出力(たとえば、sedORを使用)を次の部分にパイプしたいと思います。awkmy_server_ip

"server":"my_server_ip",
"server_port":8388,

ベストアンサー1

"server"特定の文字列ではなく末尾の引用符の内容を変更したいようです。my_server_ipその場合は、sedを使用してください。

$ sed 's/\("server":"\)[^"]*/\1'"$(hostname -i)"'/' file
"server":"<the host name>",
"server_port":8388,

またはawk(hostname -i出力に逆参照メタ文字またはsed区切り文字を含めることができる場合はより強力ですが、そうではありません):

$ awk -v h="$(hostname -i)" 'BEGIN{FS=OFS="\""} $2=="server"{$4=h} 1' file
"server":"<the host name>",
"server_port":8388,

おすすめ記事