我有以下数组:
declare -a case=("060610" "080813" "101016" "121219" "141422")
我想生成另一个数组,其中元素的空格大小适当插入:
"06 06 10" "08 08 13" "10 10 16" "12 12 19" "14 14 22"
我直到使用sed单独处理元素:
echo '060610' | sed 's/../& /g'
但是在使用数组时我无法做到这一点。 sed混淆了元素之间的空格,我留下了输出:
echo "${case[@]}" | sed 's/../& /g'
给我:
06 06 10 0 80 81 3 10 10 16 1 21 21 9 14 14 22
有人可以帮忙吗?
答案 0 :(得分:2)
你需要遍历整个阵列,而不是整个回声,因为当你回应它时你不会得到分组。
declare -a newcase
for c in "${case[@]}"
do
newcase+=("$(echo "$c" | sed 's/../& /g')")
done
答案 1 :(得分:2)
您可以使用printf '%s\n' "${case[@]}" | sed 's/../& /g'
将每个号码放在一个单独的行上,避免出现空间问题:
$ declare -a case=("060610" "080813" "101016" "121219" "141422")
$ printf '%s\n' "${case[@]}" | sed 's/../& /g'
06 06 10
08 08 13
10 10 16
12 12 19
14 14 22
如果您想将其恢复为数组,可以使用mapfile