Linux命令用来自重定向输出的文本替换文件中的文本

时间:2011-09-20 18:20:29

标签: linux perl shell ubuntu

我正在使用shell脚本来自动执行某些服务器任务。我需要做的主要事情之一是配置。

我正在尝试快速找到从一个来源提取数据然后替换另一个来源的数据的方法。简而言之,我要做的是将my.cnf中的IP地址替换为ifconfig中的IP地址。我想要更改的IP地址是绑定地址。

以下是我想要做的一个例子:

一个。使用ifconfig - 获取网络信息(包括IP地址)。

B中。使用该输出,使用正则表达式仅提取IP地址

℃。使用IP地址替换my.cnf

中的绑定地址值

我不熟悉管道和重定向。我很确定我可能要输出到变量,然后在另一个命令中使用该变量来完成操作?使用perl会更容易吗?

修改

以下是执行此操作的代码:

ip=`ifconfig eth0 | grep "inet addr"| cut -d ":" -f2 | cut -d " " -f1` ; sed -i "s/\(bind-address[\t ]*\)=.*/\1= $ip/" /etc/mysql/my.cnf

非常感谢Jaidev Sridhar的指导。

3 个答案:

答案 0 :(得分:1)

$ ip=`ifconfig eth0 | grep "inet addr"| cut -d ":" -f2 | cut -d " " -f1`; sed -i "s/MYIP=.*/MYIP=$ip/g" foo.cnf

假设:

  • eth0是界面
  • 您需要ipv4地址
  • 你的conf文件是foo.cnf,它有一行需要更换的MYIP = a.b.c.d

答案 1 :(得分:0)

您可以使用awk / cut / sed从ifconfig输出中提取IP地址。

并使用sed -i更新my.cnf

答案 2 :(得分:0)

没有削减和ip变量不会污染。

ip="`ifconfig eth0 | sed 's/.*inet addr:\([0-9\.]*\).*/\1/p'`" sed -i "s/^\(bind_address\)=.*/\1=$ip/" /etc/my.cnf