我目前正在开发一个bash shell脚本,并且有一个类似这样的字符串:
"IP ADDRESS: 12313 isjdfisafjaslfsjfasd IP ADDRESS: 21311 asdfafa"
我试图将字符串分成两个数组,一个是前半部分,另一个是后半部分。在这种情况下,理想数组将有两个元素,
[IP ADDRESS: 12313 isjdfisafjaslfsjfasd] [IP ADDRESS: 21311 asdfafa]
有没有人有关于如何做到这一点的任何提示?我试过在网上看,但没有任何问题与这个想法太相似。
答案 0 :(得分:3)
最简单的方法是使用参数扩展/子字符串提取:
#!/bin/bash
c="IP ADDRESS: 12313 isjdfisafjaslfsjfasd IP ADDRESS: 21311 asdfafa"
a=( IP${c##* IP} ) # ${c##* IP} remove everything up to 'IP' from left
b=( ${c% IP*} ) # ${c% IP*} remove everything to first 'IP' from right
echo "a: ${a[@]}"
echo "b: ${b[@]}"
<强>输出强>
$ splitscript.sh
a: IP ADDRESS: 21311 asdfafa
b: IP ADDRESS: 12313 isjdfisafjaslfsjfasd
参数扩展括号中的 注意(例如${c##* IP}
)空格' '
无需转义。
答案 1 :(得分:0)
s="IP ADDRESS: 12313 isjdfisafjaslfsjfasd IP ADDRESS: 21311 asdfafa"
pat="(IP ADDRESS:.*)(IP ADDRESS:.*)"
[[ $s =~ $pat ]] && declare -a arr=("${BASH_REMATCH[@]:1:2}")
echo "First: ${arr[0]} Second: ${arr[1]}"
输出:
First: IP ADDRESS: 12313 isjdfisafjaslfsjfasd Second: IP ADDRESS: 21311 asdfafa