繁体   English   中英

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

[英]Linux command to replace text in a file with text from redirected output

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

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

这是我想做的一个例子:

A.使用ifconfig-获取网络信息(将包括IP地址)。

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

C.使用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的指导。

$ 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 = abcd需要替换

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

并使用sed -i更新my.cnf

没有削减,并且ip变量不会污染。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM