我有一个作为路径的字符串:
/tmp/something
我需要用反斜杠转义正斜杠:
\/tmp\/something
我怎样才能做到这一点?或许sed
?
请指出我正确的方向。
答案1
你可以使用 Bash 自己的变量操作方法(参数扩展)来做到这一点,尽管语法相当可怕:
$ string='/tmp/something'
$ escapedstring="${string//\//\\\/}"
$ printf '%s\n' "$escapedstring"
\/tmp\/something
为了进一步解释这一点,在 bash 中${var//xxx/yyy}
意味着“获取变量var
并将所有出现的 替换为xxx
” yyy
。在这种情况下,需要在指定替换端和替换时对斜杠进行转义;前者\/
用于单个正斜杠,后者\\\/
用于反斜杠加正斜杠,因此您最终会得到可笑的外观${string//\//\\\/}
。
请记住不要使用它echo
来显示其内容,因为根据实现或环境,echo
可能会自行处理反斜杠字符。
答案2
sed
是正确的方向!按照类似的教程进行操作https://www.grymoire.com/Unix/Sed.html#uh-1;最基本的方法是
echo $string | sed 's;old;replacement;g'
s
命令在哪里,即“搜索和替换”,g
是表示“在每一行上重复直到完成”的标志,old
是您要替换的内容(/
在您的情况下),replacement
是您想要替换的内容。 (您可能需要转义反斜杠,所以\\/
。)
玩得开心!
答案3
你可以按照这些思路做一些事情。
# let
str='/tmp/something'
str_esc=$(printf '%s\n' "$str" | sed 's:/:\\&:g')