77 votes

Puis-je utiliser sed pour manipuler une variable dans bash ?

Dans mon programme, j'aimerais d'abord obtenir l'entrée de l'utilisateur, puis insérer un \ avant chaque / J'écris donc ceci, mais cela ne fonctionne pas.

echo "input a website"
read website

sed '/\//i\/' $website

182voto

eugene y Points 37378

Essayez ceci :

website=$(sed 's|/|\\/|g' <<< $website)

Bash supporte en fait ce type de remplacement nativement :

${parameter/pattern/string} - remplacer le premier match de pattern avec string .
${parameter//pattern/string} - remplacer toutes les correspondances de pattern avec string .

Vous pouvez donc le faire :

website=${website////\\/}

Explication :

website=${website // / / \\/}
                  ^  ^ ^  ^
                  |  | |  |
                  |  | |  string, '\' needs to be backslashed
                  |  | delimiter
                  |  pattern
                  replace globally

24voto

Karoly Horvath Points 45145
echo $website | sed 's/\//\\\//g'

ou, pour une meilleure lisibilité :

echo $website | sed 's|/|\\/|g'

0 votes

Cela fonctionne bien aussi, pourriez-vous nous expliquer cela 's/\//) \\\ //g" et ce "s|/| \\ /|g' ??

1 votes

searchreplacecommand|source|target|global(all matches) où vous pouvez utiliser n'importe quel caractère comme séparateur ( | ). traditionnellement / est utilisé comme séparateur

0 votes

Cependant, lorsque j'utilise " " et la variable, il n'y a pas d'insertion. Pouvez-vous en trouver la raison ?

2voto

Noam Manos Points 145

Vous pouvez également utiliser Expansion des paramètres pour remplacer les sous-chaînes de la variable. Par exemple :

website="https://stackoverflow.com/a/58899829/658497"
echo "${website//\//\\/}"

https:\/\/stackoverflow.com\/a\/58899829\/658497

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