如何使用shell替换特殊字符

时间:2013-03-07 18:20:09

标签: linux bash shell unix

我有一个字符串变量x=tmp/variable/custom-sqr-sample/test/example 在脚本中,我想要做的是用/替换所有“ - ”, 之后,我应该得到以下字符串

x=tmp/variable/custom/sqr/sample/test/example 

任何人都可以帮助我吗?

我尝试了以下语法 它不起作用

exa=tmp/variable/custom-sqr-sample/test/example
exa=$(echo $exa|sed 's/-///g')

3 个答案:

答案 0 :(得分:2)

sed基本上支持任何分隔符,当一个人尝试匹配/时会派上用场,最常见的是|#@,选择一个不是在你需要处理的字符串中。

$ echo $x
tmp/variable/custom-sqr-sample/test/example

$ sed 's#-#/#g' <<< $x
tmp/variable/custom/sqr/sample/test/example

在上面尝试过的推荐中,你所需要的只是逃避斜线,即

echo $exa | sed 's/-/\//g'

但选择不同的分隔符更好。

答案 1 :(得分:1)

在这种情况下,tr工具可能是比sed更好的选择:

x=tmp/variable/custom-sqr-sample/test/example
echo "$x" | tr -- - /

--并非绝对必要,但会让tr(和人类)误以为-选项。)

答案 2 :(得分:0)

bash中,您可以使用参数替换:

$ exa=tmp/variable/custom-sqr-sample/test/example
$ exa=${exa//-/\/}
$ echo $exa
tmp/variable/custom/sqr/sample/test/example