我有一个生成如下的字符串:
192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1/0/13, changed state to up
Run Code Online (Sandbox Code Playgroud)
如何取出该字符串并从中生成2个变量(使用bash)?
比如我想要的
$ip=192.168.1.1
$int=GigabitEthernet1/0/13
Run Code Online (Sandbox Code Playgroud)
小智 47
试试这个:
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]}"
Run Code Online (Sandbox Code Playgroud)
在此脚本中${myarray[0]}引用逗号分隔字符串中的第一个字段,${myarray[1]}引用逗号分隔字符串中的第二个字段,等等.
dam*_*ois 24
使用read带有自定义字段分隔符(IFS=,):
$ 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
Run Code Online (Sandbox Code Playgroud)
确保将字符串括在引号中.
@damienfrancois有最好的答案.你也可以使用bash正则表达式匹配:
if [[ $string =~ ([^,]+).*"Interface "([^,]+) ]]; then
ip=${BASH_REMATCH[1]}
int=${BASH_REMATCH[2]}
fi
echo $ip; echo $int
Run Code Online (Sandbox Code Playgroud)
192.168.1.1
GigabitEthernet1/0/13
Run Code Online (Sandbox Code Playgroud)
使用bash正则表达式,可以引用任何文字文本(必须是,如果有空格),但不能引用正则表达式元字符.