bash: affecter les résultats de grep regex au tableau
j'essaye d'attribuer un résultat d'expression régulière à un tableau à l'intérieur d'un script bash mais je ne suis pas sûr que ce soit possible, ou si je le fais complètement mal. Ci-dessous est ce que je veux, mais je sais que ma syntaxe est incorrecte:
indexes[4]=$(echo b5f1e7bfc2439c621353d1ce0629fb8b | grep -o '[a-f0-9]{8}')
exemple:
index[1]=b5f1e7bf
index[2]=c2439c62
index[3]=1353d1ce
index[4]=0629fb8b
Tous les liens, ou des conseils, ce serait merveilleux :)
10
demandé sur
Ryan
2010-04-05 06:12:26
3 réponses
ici
array=( $(echo b5f1e7bfc2439c621353d1ce0629fb8b | grep -o '[a-f0-9]\{8\}') )
$ echo ${array[@]}
b5f1e7bf c2439c62 1353d1ce 0629fb8b
28
répondu
theosp
2010-04-05 02:18:27
#!/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
4
répondu
Dennis Williamson
2010-04-05 05:45:59
voici un moyen pur de bash, pas de commandes externes nécessaires
#!/bin/bash
declare -a array
s="b5f1e7bfc2439c621353d1ce0629fb8b"
for((i=0;i<=${#s};i+=8))
do
array=(${array[@]} ${s:$i:8})
done
echo ${array[@]}
sortie
$ ./shell.sh
b5f1e7bf c2439c62 1353d1ce 0629fb8b
2
répondu
ghostdog74
2010-04-05 02:30:50