linux - 如何替换字符串的前k个字符?

标签 linux bash

我知道如何替换给定字符串的某个子字符串:

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/

相关文章:

linux - NSIS 支持 Linux 和 Solaris

bash - Docker 为什么没有设置 $USER 环境变量

linux - 如何在大文件中查找唯一行?

linux - bash 脚本中转义字符的问题

c - 为什么我的 C 程序中会出现 "Program failed: Memory fault, core dumped"?

c++ - Linux 中的多点触控

regex - 使用 expect 或 shell 脚本的 Telnet SMTP

c - Linux mmap() 错误

linux - 什么是最快的 egrep

linux - 尝试从 bash 脚本将 ssh key 推送到 github 时出错