ある文字列の特定の文字を別の文字列の特定の文字に置き換えるには?

ある文字列の特定の文字を別の文字列の特定の文字に置き換えるには?

例:私は、とstring1 = 'abcd'を持っていますstring2 = 'xwyz'

string1の3番目の文字(「c」)をstring2の4番目の文字(「z」)に置き換えたいと思います。

もちろん、文字列の索引付けは0から始まります。

どうすればいいですか?

答え1

そして強く打つ部分文字列操作:

s1="abcd"
s2="xwyz"
s1=${s1:0:2}${s2:3}${s1:3}
  • ${s1:0:2}- 最初の部分には以下が含まれますab(3番目の文字までc)。

  • ${s2:3}s2- 挿入する文字列の4番目の文字

  • ${s1:3}s1- 文字列の最後(4番目)文字


最終s1値:

echo $s1
abzd

またはGNUを使用してくださいアッツール:

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

  • <<< $s1- 最初の文字列がs1入力と見なされます。

  • -v s2=$s2- 2番目の文字列をs2変数として渡します。アッスクリプト

  • 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]}}'

関連情報