如何用另一个字符串中的特定字符替换一个字符串中的特定字符?

如何用另一个字符串中的特定字符替换一个字符串中的特定字符?

例如:我有string1 = 'abcd'、 和string2 = 'xwyz'

我想用 string2 的第四个字符(“z”)替换 string1 的第三个字符(“c”)。

当然,字符串索引是从0开始的。

我怎样才能做到这一点?

答案1

巴什子串操作:

s1="abcd"
s2="xwyz"
s1=${s1:0:2}${s2:3}${s1:3}
  • ${s1:0:2}- 第一个切片包含ab(直到第三个字符c

  • ${s2:3}s2-要插入的字符串的第 4 个字符

  • ${s1:3}s1-字符串的最后一个(第 4 个)字符


最终s1值:

echo $s1
abzd

或者使用 GNUawk工具:

gawk -v s2=$s2 -v FPAT='[a-z]' '{$3=substr(s2,4)}1' OFS="" <<< $s1
abzd

  • <<< $s1- 第一个字符串s1被视为输入内容

  • -v s2=$s2- 将第二个字符串s2作为变量传递到awk脚本

  • FPAT='[a-z]'- 定义字段值的正则表达式模式([a-z]- 任何字母字符)


或者,您也可以应用“空”字段分隔符FS=""将每个字符视为单独的字段:

gawk -v s2=$s2 'BEGIN{ FS=OFS="" }{$3=substr(s2,4)}1' <<< $s1
abzd

答案2

这是 awk 代码(又长又复杂,但对我有用)

echo |awk -v a="$string1" -v b="$string2" '{split(a,a1,""); n=split(b,b1,"");a1[2]=b1[3];for (i=1;i<=n;i++) {printf a1[i]}}'

相关内容