Split string into multiple variables in Bash
本问题已经有最佳答案,请猛点这里访问。
我有一个在下面生成的字符串:
1 | 192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1/0/13, changed state to up |
我如何才能取下这个字符串并从中生成2个变量(使用bash)?
例如,我想要
1 2 | $ip=192.168.1.1 $int=GigabitEthernet1/0/13 |
试试这个:
1 2 3 4 5 6 | mystring="192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1/0/13, changed state to up" IFS=',' read -a myarray <<<"$mystring" echo"IP: ${myarray[0]}" echo"STATUS: ${myarray[3]}" |
在这个脚本中,
使用带有自定义字段分隔符(
1 2 3 4 5 | $ IFS=, read ip state int change <<<"192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1013, changed state to up" $ echo $ip 192.168.1.1 $ echo ${int##*Interface} GigabitEthernet1013 |
确保将字符串括在引号中。
@达米恩弗朗索瓦有最好的答案。您还可以使用bash regex匹配:
1 2 3 4 5 | if [[ $string =~ ([^,]+).*"Interface"([^,]+) ]]; then ip=${BASH_REMATCH[1]} int=${BASH_REMATCH[2]} fi echo $ip; echo $int |
1 2 | 192.168.1.1 GigabitEthernet1/0/13 |
对于bash regex,可以引用任何文本(如果有空格,则必须是),但不能引用regex元字符。