![如何用另一个字符串中的特定字符替换一个字符串中的特定字符?](https://linux22.com/image/9745/%E5%A6%82%E4%BD%95%E7%94%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%E6%9B%BF%E6%8D%A2%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
例如:我有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]}}'