我知道如何替换给定字符串的某个子字符串:
foo=abcABC
echo ${foo/abc/xyz} # xyzABC
是否也可以将前 k 个字符替换为 k 次给定字符?
更新:示例:
foobar
,将前 k = 3
字符替换为 Z
得到 ZZZbar
。
最佳答案
基于Change string char at index X 。给定字符串 $foo
,要通过字符串 $pattern
更改前 k
个字符,可以这样实现:
for ((i=0; i < $k; i++))
do
foo="${foo:0:$i}$pattern${foo:$((i+1))}"
done
测试
$ a="hellomynameisyou"
$ k=5
$ pattern="x"
$ for ((i=0; i < $k; i++)); do a="${a:0:$i}$pattern${a:$((i+1))}"; echo $a; done
xellomynameisyou
xxllomynameisyou
xxxlomynameisyou
xxxxomynameisyou
xxxxxmynameisyou
对于您的具体示例
$ pattern="Z"
$ k=3
$ a="foobar"
$ for ((i=0; i < $k; i++)); do a="${a:0:$i}$pattern${a:$((i+1))}"; echo $a; done
Zxxbar
ZZxbar
ZZZbar
$ echo $a
ZZZbar
关于linux - 如何替换字符串的前k个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059941/