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
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
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
Cela fonctionne bien aussi, pourriez-vous nous expliquer cela 's/\//) \\\ //g" et ce "s|/| \\ /|g' ??
searchreplacecommand|source|target|global(all matches)
où vous pouvez utiliser n'importe quel caractère comme séparateur ( |
). traditionnellement /
est utilisé comme séparateur
Cependant, lorsque j'utilise " " et la variable, il n'y a pas d'insertion. Pouvez-vous en trouver la raison ?
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 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.