2010-04-05 7 views
9

Estoy tratando de asignar un resultado de expresión regular a una matriz dentro de una secuencia de comandos bash, pero no estoy seguro si eso es posible, o si lo estoy haciendo completamente mal. El siguiente es lo que quiero que suceda, sin embargo sé que mi sintaxis es incorrecta:bash: asignar resultados grep regex a la matriz

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

tal que:

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

Cualquier enlace, o consejo, sería maravilloso :)

Respuesta

27

aquí

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

maravillosa - exactamente lo que necesitaba - gracias !!! – Ryan

2

aquí es una forma pura fiesta, no hay comandos externos necesarios

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

salida

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