2015-07-03 56 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 
相關問題