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
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
)