bash 为字符串中的每个斜杠插入反斜杠

bash 为字符串中的每个斜杠插入反斜杠

我有一个作为路径的字符串:

/tmp/something

我需要用反斜杠转义正斜杠:

\/tmp\/something

我怎样才能做到这一点?或许sed

请指出我正确的方向。

答案1

你可以使用 Bash 自己的变量操作方法(参数扩展)来做到这一点,尽管语法相当可怕:

$ string='/tmp/something'
$ escapedstring="${string//\//\\\/}"
$ printf '%s\n' "$escapedstring"     
\/tmp\/something

为了进一步解释这一点,在 bash 中${var//xxx/yyy}意味着“获取变量var并将所有出现的 替换为xxxyyy。在这种情况下,需要在指定替换端和替换时对斜杠进行转义;前者\/用于单个正斜杠,后者\\\/用于反斜杠加正斜杠,因此您最终会得到可笑的外观${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')

相关内容