在 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

相关内容