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

Linux命令将文件中的文本替换为重定向输出中的文本,linux,perl,shell,ubuntu,Linux,Perl,Shell,Ubuntu,我正在编写一个shell脚本来自动化一些服务器任务。我需要做的一件主要事情是配置 我试图找到一种快速的方法,从一个源中提取数据,然后替换另一个源中的数据。简而言之,我要做的是用ifconfig中的IP地址替换my.cnf中的IP地址。我要更改的ip地址是绑定地址 下面是我想做的一个例子: A.使用ifconfig-获取网络信息(包括ip地址) B.使用该输出,使用正则表达式仅提取ip地址 C.使用IP地址替换my.cnf中的绑定地址值 我不太熟悉管道和重定向。我很确定我可能必须输出一个变量,然后

我正在编写一个shell脚本来自动化一些服务器任务。我需要做的一件主要事情是配置

我试图找到一种快速的方法,从一个源中提取数据,然后替换另一个源中的数据。简而言之,我要做的是用ifconfig中的IP地址替换my.cnf中的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=a.b.c.d需要替换
假设:

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

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


并使用sed-i更新my.cnf

您可以使用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

无切割,ip变量不会造成污染

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

谢谢,我来试一试。这是我正在使用的sed命令,但它不起作用:
sed-I的/\(绑定地址[]*\)=[]*\([0-9]\{1,3\\.[0-9]\{1,3\\\.[0-9]\{1,3\\\\.[0-9]\{1,3\\\\)/\1=$ip/g'my.cnf
。我想知道确切的线路是绑定地址。你能帮我一下吗?还有其他行是以“bind address*”结尾的吗?还是以bind address=a.b.c.d结尾的?如果没有,那么你不需要匹配整个内容。谢谢,我会试一试。这是我正在使用的sed命令,但它不起作用:
sed-I的/\(绑定地址[]*\)=[]*\([0-9]\{1,3\\.[0-9]\{1,3\\\.[0-9]\{1,3\\\\.[0-9]\{1,3\\\\)/\1=$ip/g'my.cnf
。我想知道确切的线路是绑定地址。你能帮我一下吗?还有其他行是以“bind address*”结尾的吗?还是以bind address=a.b.c.d结尾的?如果没有,那么您不需要匹配整个内容。您也可以通过在sed中使用选择器来避免grep
ifconfig eth0 | sed'/inet addr:/s/*inet addr…
您也可以通过在sed中使用选择器来避免grep<代码>ifconfig eth0 | sed'/inet addr:/s/*inet addr…