удар: присвойте grep regex результаты для выстраивания

Я пытаюсь присвоить результат регулярного выражения массиву в сценарии удара, но я не уверен, возможно ли это, или если я делаю его полностью неправильно. Ниже то, что я хочу произойти, однако я знаю, что мой синтаксис является неправильным:

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

таким образом, что:

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

Любые ссылки или совет, были бы замечательны :)

12
задан Ryan 5 April 2010 в 02:12
поделиться

3 ответа

here

array=( $(echo b5f1e7bfc2439c621353d1ce0629fb8b | grep -o '[a-f0-9]\{8\}') )
$ echo ${array[@]}
b5f1e7bf c2439c62 1353d1ce 0629fb8b
33
ответ дан 2 December 2019 в 03:48
поделиться

здесь чистый способ bash, никаких внешних команд не требуется

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

вывод

$ ./shell.sh
b5f1e7bf c2439c62 1353d1ce 0629fb8b
2
ответ дан 2 December 2019 в 03:48
поделиться
#!/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
ответ дан 2 December 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: