我有一个文件,config.txt有很多行。一行是这样的
address=
我正在使用
获取config.txt所在机器的IP地址ip addr | grep 'state UP' -A2 | tail -1 | awk '{print $2}' | cut -f1 -d'/'
该代码取自Stack Overflow答案。我得到的输出是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 :(得分:0)
在单个管道中使用awk
,awk
和grep
几乎总是一个错误,因为sed
可以执行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}"
单行提取IP地址,如下所示:
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
然后你可以将该程序传递给{{1}}:
{{1}}
答案 1 :(得分:-1)
sed -i 's/address=/address='$(ip addr | grep 'state UP' -A2 | tail -1 | awk '{print $2}' | cut -f1 -d'/')'/' filename
其中filename是相关文件的名称,这里的关键是使用间接即$(ip addr | grep'state UP'-A2 | tail -1 | awk'{print $ 2}'| cut -f1 -d'/')然后在sed命令中使用它,特别强调引号。间接必须位于sed命令的单引号之外。