shell用${}替换字符串中内容

#!/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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值