我尝试用另一个结果替换文件中的结果。基本上尝试替换 netplan 文件中的 ip 地址,但它不起作用。
这是句子:
sed -i "s/$(cat /etc/netplan/00-installer-config.yaml |grep - |head -n1 |tr -d "-" |awk -F / '{print $1}')/$(ip add show |grep ens160 |grep inet |awk '{print $2}' |awk -F / '{print $1}')/g" /etc/netplan/00-installer-config.yaml
提前致谢,
更新:
发现问题需要删除空间 sed "s/$(cat /etc/netplan/00-installer-config.yaml |grep - |head -n1 |tr -d "-" |awk -F / '{print $1}' |tr -d " " )/$(ip add show |grep ens160 |grep inet |awk '{print $2}' |awk -F / '{print $1}')/g" /etc/netplan/00-installer-config.yaml
谢伊
答案1
sed "s/$(cat /etc/netplan/00-installer-config.yaml |grep - |head -n1 |tr -d "-" |awk -F /'{打印 $1}'|tr -d " " )/$(ip add show |grep ens160 |grep inet |awk'{打印 $2}'|awk -F /'{打印 $1}')/g" /etc/netplan/00-installer-config.yaml
答案2
如果你不把所有内容都塞到一行中,这将更具可读性:
from=$(cat /etc/netplan/00-installer-config.yaml |grep - |head -n1 |tr -d "-" |awk -F / '{print $1}' |tr -d " " )
to=$(ip add show |grep ens160 |grep inet |awk '{print $2}' |awk -F / '{print $1}')
sed "s/$from/$to/g" /etc/netplan/00-installer-config.yaml
而且 awk 本身可以完成 grep/head/tr 所能做的事情:
from=$(
awk '
/-/ { # grep -
gsub(/-/, "", $0) # tr -d "-"
split($0, a, "/") # awk -F/ ...
gsub(/ /, "", a[1]) # tr -d " "
print a[1]
exit # head -n1
}
' /etc/netplan/00-installer-config.yaml
)
to=$(ip add show | awk '/ens160/ && /inet/ {split($2, a, "/"); print a[1]; exit}')
sed "s/$from/$to/g" /etc/netplan/00-installer-config.yaml