SED命令将变量中的IP地址添加或更新到/ etc / network / interfaces

时间:2017-05-13 16:02:29

标签: bash variables sed

我正在开发一个部署脚本"我希望能够在没有双重条目的情况下再次运行#34;

我正在尝试添加一个sed命令来查找" address"字段,如果它不存在,则创建它,如果确实存在,则将其修改为正确的IP地址。

这就是我到目前为止......

#!/bin/bash
ipaddress=192.168.1.1
sudo grep -q '^address' /etc/network/interfaces && sudo sed -i 's/^address.*/"address $ipaddress"/' /etc/network/interfaces || echo "address ${ipaddress}" >> /etc/network/interfaces

如果没有条目,它将创建正确的条目,但如果条目存在或正确,我会遇到各种问题。

非常感谢任何帮助!

最终答案基于" 1stSi Dave"以下

如果条目不存在或更改任何现有地址条目,则创建条目的最终工作脚本为:

sudo grep -q '^address' /etc/network/interfaces && sudo sed -i -e 's/^address.*/address '$ipaddress'/' /etc/network/interfaces || echo "address ${ipaddress}" >> /etc/network/interfaces

1 个答案:

答案 0 :(得分:0)

首先,我认为你的sed命令需要'-e'命令行选项:

sed -i -e 's/...'

也许这是一个错字,因为你的命令行的其余部分表示你想要附加到文件,而不是编辑到位。接下来,单引号隐藏了您尝试在sed命令脚本中实现的变量扩展。他们还在输出中保留双引号,我认为这不是你想要的。试试这个:

sed -e 's/^address.*/address '$ipaddress'/' /etc/network/interfaces

第三,您可能希望在“地址”标记之前包含空格的可能性。最后,您可能执行想要就地编辑(使用sed -i),因为在文件末尾添加编辑的行可能无法正常工作。