例:私は、と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]}}'