在我的计划中,我想首先获取用户输入,然后在每个\
之前插入/
所以我写这个,但它不起作用。
echo "input a website"
read website
sed '/\//i\/' $website
答案 0 :(得分:96)
试试这个:
website=$(sed 's|/|\\/|g' <<< $website)
Bash实际上支持这种替换natively:
${parameter/pattern/string}
- 将pattern
的第一场比赛替换为string
${parameter//pattern/string}
- 将pattern
的所有匹配项替换为string
。
因此你可以这样做:
website=${website////\\/}
说明:
website=${website // / / \\/}
^ ^ ^ ^
| | | |
| | | string, '\' needs to be backslashed
| | delimiter
| pattern
replace globally
答案 1 :(得分:10)
echo $website | sed 's/\//\\\//g'
或者,为了更好的可读性:
echo $website | sed 's|/|\\/|g'
答案 2 :(得分:1)
您还可以使用Parameter-Expansion替换变量中的子字符串。 例如:
website="https://stackoverflow.com/a/58899829/658497"
echo "${website//\//\\/}"
https:\ / \ / stackoverflow.com \ / a \ / 58899829 \ / 658497