2010-04-05 8 views
9

Próbuję przypisać wynik wyrażenia regularnego do tablicy w skrypcie basha, ale nie jestem pewien, czy to możliwe, lub jeśli robię to zupełnie nie tak. Poniżej jest to, co chcę się zdarzyć, jednak wiem, że moje składnia jest niepoprawna:bash: przypisz wyniki grege regex do tablicy

indexes[4]=$(echo b5f1e7bfc2439c621353d1ce0629fb8b | grep -o '[a-f0-9]\{8\}') 

takie, że:

index[1]=b5f1e7bf 
index[2]=c2439c62 
index[3]=1353d1ce 
index[4]=0629fb8b 

Wszelkie linki lub porady, byłoby wspaniałe :)

Odpowiedz

27

tutaj

array=($(echo b5f1e7bfc2439c621353d1ce0629fb8b | grep -o '[a-f0-9]\{8\}')) 
$ echo ${array[@]} 
b5f1e7bf c2439c62 1353d1ce 0629fb8b 
+0

wspaniałe - dokładnie to, co potrzebne - dziękujemy !!! – Ryan

2

oto bash czysty sposób, żadne polecenia zewnętrzne potrzebne

#!/bin/bash 
declare -a array 
s="b5f1e7bfc2439c621353d1ce0629fb8b" 
for((i=0;i<=${#s};i+=8)) 
do 
array=(${array[@]} ${s:$i:8}) 
done 
echo ${array[@]} 

wyjście

$ ./shell.sh 
b5f1e7bf c2439c62 1353d1ce 0629fb8b 
4
#!/bin/bash 
# Bash >= 3.2 
hexstring="b5f1e7bfc2439c621353d1ce0629fb8b" 
# build a regex to get four groups of eight hex digits 
for i in {1..4} 
do 
    regex+='([[:xdigit:]]{8})' 
done 
[[ $hexstring =~ $regex ]]  # match the regex 
array=(${BASH_REMATCH[@]})  # copy the match array which is readonly 
unset array[0]     # so we can eliminate the full match and only use the parenthesized captured matches 
for i in "${array[@]}" 
do 
    echo "$i" 
done 
Powiązane problemy