2015-07-03 59 views
0

我目前工作的一个bash shell脚本数组,有去像这样的字符串:切一个字符串分解成两个词中的Bash

"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})的空间' '不需要转义。

+0

谢谢!它效果很好! – trynacode

0

使用Bash Pattern Matching

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 
相关问题