#!/bin/bash
if [ $# != 3 ]
then
echo "Usage: $0 base-str src-str dst-str
example: $0 name=\"abc\"; name=\"efu\"; name=\"dda\" \"name\" \"test\"
result: test[0]=\"abc\"; test[1]=\"ef\"; test[2]=\"dda\""
exit
fi
base_str=$1
src_str=$2
dst_str=$3
echo "before convert: ${base_str}"
base_str=${base_str//${src_str}/${dst_str}"[]"}
i=0
while [[ ${base_str} =~ ${dst_str}"[]" ]]
do
base_str=${base_str/${dst_str}\[\]/${dst_str}\[$i\]}
let i++
done
echo "after convert: ${base_str}"
存文件convert.sh,
执行./convert.sh 'name="li er" name="wang san" name="erzi"' name test
结果:
before convert: name="li er" name="wang san" name="erzi"
after convert: test[0]="li er" test[1]="wang san" test[2]="erzi"
有个朋友在群里问如何把一个字符串中的字串形态替换成数组形态,好多年没有写代码有点手痒,在网上查了一下,用sed、awk、grep是处理文件的,想不通过文件直接处理字串于是想到了${},又在网上查了一下用法,攒了一个小代码。
${}是字符串处理函数,可以进行截取、替换等字符串处理。
这里用了:
${str/src/dst}把str中第一个出现的src替换为dst
${str//src/dst}把str中所有src替换为dst
while循环处理
[[ $str =~ $sub_str]]判定str是否包含sub_str