1040 votes

Remplacez une sous-chaîne pour une autre chaîne dans un script shell

J'ai "j'aime Suzi et Marry" et je veux changer "Suzi" à "Sara"

 #!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
# do something...
 

et a le résultat doit être le suivant:

 firstString="I love Sara and Marry"
 

Peut-être que quelqu'un peut m'aider ici?

1766voto

ruakh Points 68789
Joel a écrit :

258voto

Kevin Points 23308

Cela peut être fait entièrement avec la manipulation de chaînes bash:

 first="I love Suzy and Mary"
second="Sara"
first=${first/Suzy/$second}
 

138voto

RomKazanova Points 69

pour Dash, tous les messages précédents ne fonctionnent pas

pour Dash:

 result=$(echo $firstString | sed 's/Suzi/$secondString/g')
 

71voto

Kent Points 71470

essaye ça:

  sed "s/Suzi/$secondString/g" <<<"$firstString"
 

52voto

Camilo Martin Points 5586

Bash va être mieux que sed si vous vous inquiétez au sujet de vos chaînes ayant potentiellement regex caractères.

echo ${firstString/Suzi/$secondString}

Il est vraiment sûr à utiliser et fonctionne avec au moins aussi vieux que Bash 3.1 (Bash pour Windows). Afin portables et coffre-fort.

Pour montrer combien vous vraiment n'avez pas besoin de vous soucier de s'échapper: nous allons faire ce chemin:

/home/name/foo/bar

dans:

~/foo/bar

Mais seulement si /home/nom est dans le début. Nous n'avons pas besoin sed!

Étant donné que bash nous donne la magie des variables $PWD et $HOME, nous pouvons:

echo "${PWD/#$HOME/~}"

Notez comment la variable $HOME contient des barres obliques, mais cela n'a rien cassé.

Lecture recommandée: Advanced Bash Scripting Guide.

Si vous insistez sur l'utilisation d' sed, assurez-vous de s'échapper de chaque personnage et de son chien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X