【发布时间】:2011-10-08 07:27:18
【问题描述】:
在我的程序中,我想先获取用户输入,然后在每个/ 之前插入一个\
所以我写了这个,但它不起作用。
echo "input a website"
read website
sed '/\//i\/' $website
【问题讨论】:
在我的程序中,我想先获取用户输入,然后在每个/ 之前插入一个\
所以我写了这个,但它不起作用。
echo "input a website"
read website
sed '/\//i\/' $website
【问题讨论】:
试试这个:
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
【讨论】:
command to long:
'\' needs to be backslashed
echo $website | sed 's/\//\\\//g'
或者,为了更好的可读性:
echo $website | sed 's|/|\\/|g'
【讨论】:
searchreplacecommand|source|target|global(all matches) 可以使用任何字符作为分隔符 (|)。传统上/ 用于分隔符
您也可以使用Parameter-Expansion 替换变量中的子字符串。 例如:
website="https://stackoverflow.com/a/58899829/658497"
echo "${website//\//\\/}"
https:\/\/stackoverflow.com\/a\/58899829\/658497
【讨论】: