Changer la chaîne de caractères à l’index X

Je cherche depuis longtemps comment faire une manipulation de chaîne simple sous UNIX

J’ai cette chaîne:

 theStr='...............' 

Et je dois changer le 5ème caractère en A, comment cela peut-il être fait?

En C# il est fait comme ceci: le theStr[4] = 'A'; // Zero based index. theStr[4] = 'A'; // Zero based index.

Vous pouvez y arriver avec sed , l’éditeur de ligne de stream:

echo $theStr | sed s/./A/5

D’abord, vous dirigez la sortie de $ theStr vers sed, qui remplace le cinquième caractère par A.

 a="............" b="${a:0:4}A${a:5}" echo ${b} 

Voici un très bon tutoriel sur la manipulation de chaînes.

Je ne sais pas si c’est élégant, ou quelle version de bash vous avez besoin, mais

 theStr="${theStr:0:4}A${theStr:5}" 

La première partie renvoie les quatre premiers caractères, puis le caractère «A», puis tous les caractères commençant par le sixième

 shivam@desktop:~$ echo 'replace A please' | sed 's/^\(.\{8\}\).\(.*\)/\1B\2/' replace B please 

La commande sed ci-dessus remplace le 8ème caractère, peu importe ce que c’est, vous n’avez donc pas à spécifier quel caractère doit être remplacé.

Dans le code ci-dessus, il suffit de remplacer

  • 8 avec la position du personnage que vous voulez
  • B avec le personnage que veut remplacer avec!

Donc, pour votre exemple spécifique, il devient:

 shivam@desktop:~$ echo '...............' | sed 's/^\(.\{4\}\).\(.*\)/\1A\2/' ....A.......... 

Sans oublier que vous pouvez remplacer A par une chaîne en fournissant la chaîne au lieu de B ou simplement supprimer A en ne fournissant rien où B est ( \1\2 )