SED-用另一个文件替换文件结果

SED-用另一个文件替换文件结果

我尝试用另一个结果替换文件中的结果。基本上尝试替换 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

相关内容