我可以使用sed来操作bash中的变量吗?

Leo*_*han 51 bash replace sed

在我的程序中,我想首先获取用户输入,并\在每个之前插入一个/ 所以我写这个,但它不起作用.

echo "input a website"
read website

sed '/\//i\/' $website
Run Code Online (Sandbox Code Playgroud)

Eug*_*ash 116

试试这个:

website=$(sed 's|/|\\/|g' <<< $website)
Run Code Online (Sandbox Code Playgroud)

巴什实际上支持这种替代本身:

${parameter/pattern/string}-取代的第一场比赛patternstring.
${parameter//pattern/string}-更换所有比赛patternstring.

因此你可以这样做:

website=${website////\\/}
Run Code Online (Sandbox Code Playgroud)

说明:

website=${website // / / \\/}
                  ^  ^ ^  ^
                  |  | |  |
                  |  | |  string, '\' needs to be backslashed
                  |  | delimiter
                  |  pattern
                  replace globally
Run Code Online (Sandbox Code Playgroud)

  • Eugene,非常感谢您对 sed 的哪个部分的作用进行细分。这是我迄今为止看到的最清楚的解释。 (2认同)

Kar*_*ath 15

echo $website | sed 's/\//\\\//g'
Run Code Online (Sandbox Code Playgroud)

或者,为了更好的可读性:

echo $website | sed 's|/|\\/|g'
Run Code Online (Sandbox Code Playgroud)