2010-04-05 21 views
9

Bir bash komut dosyasının içindeki bir diziye düzenli bir ifade sonucu atamaya çalışıyorum, ancak bunun mümkün olup olmadığından emin değilim, yoksa tamamen yanlış yapıyorum. Aşağıda ancak ben biliyorum benim sözdizimi yanlıştır, gerçekleşmesini istediğim şudur:bash: dizgeye grep regex sonuçlarını atama

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

öyle ki:

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

tüm bağlantılar veya tavsiye, olurdu harika burada :)

cevap

27

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

harika - tam olarak ne gerekli - teşekkür ederim !!! – Ryan

2

burada saf bash yolu, harici komutlar

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

çıkış

$ ./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