2017-04-05 100 views
-1

我有一个文件,config.txt有很多行。一号线是这样从一个命令的输出传递给sed

address= 

我正在上和config.txt所在的机器的IP地址,与

ip addr | grep 'state UP' -A2 | tail -1 | awk '{print $2}' | cut -f1 -d'/' 

该代码是从堆栈溢出采取答案..输出I我得到的是一个IP地址 -

192.168.3.260 

我想更换

address= 

中的config.txt与

address='192.168.3.260' 

是否有可能做到这一点的一条线,即

ip addr | grep 'state UP' -A2 | tail -1 | awk '{print $2}' | cut -f1 -d'/' | <some sed command > 
+0

你可以显示给你上述命令的当前值吗? – RomanPerekhrest

+0

添加了输出。 – Jayadevan

+0

尝试'sed“s/address = /&$(ifconfig eth0 | grep -oP'inet addr:\ K [^] +')/ g” –

回答

-1
sed -i 's/address=/address='$(ip addr | grep 'state UP' -A2 | tail -1 | awk '{print $2}' | cut -f1 -d'/')'/' filename 

其中,文件名是有问题的文件名,这里的关键是使用间接即$(ip addr | grep'状态UP'-A2 |尾-1 | awk'{print $ 2}'| cut -f1 -d'/'),然后在sed命令中使用该命令,特别强调引号。间接方向必须在sed命令的单引号之外。

0

在一个流水线使用grepcutawk几乎总是错误的,因为awk可以做的一切grep可以做的,然后一些。您可以用sed一个班轮提取IP地址,就像这样:

ip addr | sed -n '/state UP/ {n;n;s/ *inet \(.*\)\/.*/\1/p}' 

您也可以使用这种方法来建立你正在寻找的命令:

ip addr | sed -n "/state UP/ {n;n;s/ *inet \(.*\)\/.*/s|address=|\&'\1'|/p}" 

它打印这样的事情:

s|address=|&'192.168.3.260'| 

然后你可以通过管道将程序sed

ip addr | sed -n "/state UP/ {n;n;s/ *inet \(.*\)\/.*/s|address=|\&'\1'|/p}" \ 
    | sed -f - config.txt 
相关问题