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

时间:2011-07-19 08:01:54

标签: bash replace sed

在我的计划中,我想首先获取用户输入,然后在每个\之前插入/ 所以我写这个,但它不起作用。

echo "input a website"
read website

sed '/\//i\/' $website

3 个答案:

答案 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