web-dev-qa-db-fra.com

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

Dans mon programme, je voudrais d'abord obtenir l'entrée utilisateur et insérer un \ avant chaque / donc j'écris ceci, mais ça ne marche pas.

echo "input a website"
read website

sed '/\//i\/' $website
47
Leo Chan

Essaye ça:

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

Bash prend en charge ce type de remplacement en natif :

${parameter/pattern/string} - remplace la première correspondance de pattern par string.
${parameter//pattern/string} - remplace toutes les correspondances de pattern par string.

Vous pouvez donc faire:

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

Explication:

website=${website // / / \\/}
                  ^  ^ ^  ^
                  |  | |  |
                  |  | |  string, '\' needs to be backslashed
                  |  | delimiter
                  |  pattern
                  replace globally
106
Eugene Yarmash
echo $website | sed 's/\//\\\//g'

ou, pour une meilleure lisibilité:

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