Com manipulação de substring bash :
s1="abcd"
s2="xwyz"
s1=${s1:0:2}${s2:3}${s1:3}
-
${s1:0:2}
- a primeira fatia contendoab
(até o terceiro caracterec
) -
${s2:3}
- o quarto caractere da strings2
a ser inserida -
${s1:3}
- o último (4º) caractere da strings1
Valor final s1
:
echo $s1
abzd
Ou com a ferramenta GNU awk :
gawk -v s2=$s2 -v FPAT='[a-z]' '{$3=substr(s2,4)}1' OFS="" <<< $s1
abzd
-
<<< $s1
- a primeira strings1
é considerada como conteúdo de entrada -
-v s2=$s2
- passando a segunda strings2
como variável para o script awk -
FPAT='[a-z]'
- padrão regex que define um valor de campo ([a-z]
- qualquer caractere alfabético)
Como alternativa, você também pode aplicar o separador de campo "vazio" FS=""
, tratando cada caractere como um campo separado:
gawk -v s2=$s2 'BEGIN{ FS=OFS="" }{$3=substr(s2,4)}1' <<< $s1
abzd