【问题标题】:Awk output to shell variable with shell variable as search pattern使用 shell 变量作为搜索模式的 awk 输出到 shell 变量
【发布时间】:2018-03-10 16:55:32
【问题描述】:

我正在尝试使用主机名作为搜索模式(以以太网接口名称为后缀)来查找(使用 awk)特定以太网接口的 IP。我写了这个小脚本,但它什么也没输出,我不明白为什么......

#!/bin/bash
name=$(hostname -s)-eth3
IP1=`awk -v var=$name '/var/ {print $1}' /etc/hosts`
echo $IP1

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    您能否进行如下所示的一些更改,这可能会对您有所帮助。

    #!/bin/bash
    name=$(hostname -s)-eth3
    IP1=$(awk -v var=$name '$0 ~ var{print $1}' "/etc/hosts")
    echo "$IP1"
    

    不鼓励在 bash 变量中存储值时使用反引号等更改 $,也应使用 echo "$var"

    【讨论】:

      【解决方案2】:

      在斜线内,awk 将 var 视为文字字符串,而不是变量。 因此,替换:

      /var/
      

      与:

      $0 ~ var
      

      因此使用:

      #!/bin/bash
      name=$(hostname -s)-eth3
      ip1=`awk -v var=$name '$0 ~ var {print $1}' /etc/hosts`
      echo "$ip1"
      

      示例

      下面的第一个 awk 脚本没有产生匹配,但第二个却产生了:

      $ echo host-eth1 | awk -v var='host-eth1' '/var/ {print $1}'
      $ echo host-eth1 | awk -v var='host-eth1' '$0 ~ var {print $1}'
      host-eth1
      

      【讨论】:

        猜你喜欢
        • 2015-01-02
        • 2020-01-15
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多