【问题标题】:Split String in SHell在 SHell 中拆分字符串
【发布时间】:2013-04-23 18:35:08
【问题描述】:

我有一个带有 IP 地址的字符串:

172.27.16.123

我有一个类似的第二个字符串。

我需要四个不同变量中的四个部分,即 v1=172、v2=27、v3=16、v4=123 我想要这样做的原因是我想获取第三个 ip 并查看它是否位于这两个 ip 之间

我试过了

echo $givenip | cut -d\. -f3  

【问题讨论】:

标签: shell debian


【解决方案1】:
export v1=`echo $givenip | cut -d\. -f3`

【讨论】:

  • 如果我的分隔符是空格,我该如何使用它?如果我尝试: echo $var | cut -d\ -f3,或 echo $var | cut -d\' ' -f3 不起作用。第一个它说分隔符必须只有一个字符,第二个将我的提示更改为“>”。
  • export v1=echo $givenip |剪切 -d" " -f3`
【解决方案2】:

v11=$(echo $ip1 | cut -d.-f3)

回声 $v11

【讨论】:

    【解决方案3】:

    假设你的 shell 是 bash,你可能应该使用数组:

    givenip=172.27.18.191
    ip1=( $(sed 's/\./ /g' <<< 172.27.16.123) )
    ip2=( $(sed 's/\./ /g' <<< 172.27.19.254) )
    ip3=( $(sed 's/\./ /g' <<< $givenip) )
    

    然后你可以比较组件:

    givenip=172.27.18.191
    ip1=( $(sed 's/\./ /g' <<< 172.27.16.123) )
    ip2=( $(sed 's/\./ /g' <<< 172.27.19.254) )
    ip3=( $(sed 's/\./ /g' <<< $givenip) )
    
    if [ "${ip3[0]}" -ge "${ip1[0]}" -a "${ip3[0]}" -le "${ip2[0]}" ] &&
       [ "${ip3[1]}" -ge "${ip1[1]}" -a "${ip3[1]}" -le "${ip2[1]}" ] &&
       [ "${ip3[2]}" -ge "${ip1[2]}" -a "${ip3[2]}" -le "${ip2[2]}" ] &&
       [ "${ip3[3]}" -ge "${ip1[3]}" -a "${ip3[3]}" -le "${ip2[3]}" ]
     then echo $givenip is between two established IP addresses
     else echo $givenip is not between the two established IP addresses
     fi
    

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 2019-10-11
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 2021-01-19
      • 2020-12-01
      相关资源
      最近更新 更多