fabolous05 Asked: 2022-04-24 09:08:31 +0800 CST2022-04-24 09:08:31 +0800 CST 2022-04-24 09:08:31 +0800 CST bash为字符串中的每个斜杠插入反斜杠 772 我有一个字符串是路径: /tmp/something 我需要用反斜杠转义正斜杠: \/tmp\/something 我怎样才能做到这一点?也许sed? 请指出我正确的方向。 bash sed 3 个回答 Voted Best Answer frabjous 2022-04-24T09:26:12+08:002022-04-24T09:26:12+08:00 您可以使用 Bash 自己的变量操作方法(参数扩展)来做到这一点,尽管语法相当可怕: $ string='/tmp/something' $ escapedstring="${string//\//\\\/}" $ printf '%s\n' "$escapedstring" \/tmp\/something 为了进一步解释这一点,在 bash 中的${var//xxx/yyy}意思是“获取变量var并将所有出现的地方替换为xxx. yyy”。在这种情况下,您需要在指定替换和替换时转义斜线;前者\/用于单个正斜杠,后者\\\/用于反斜杠加正斜杠,因此您最终会得到可笑的外观${string//\//\\\/}。 切记不要使用echo来显示其内容,因为取决于实现或环境,echo可能会自己处理反斜杠字符。 Marcus Müller 2022-04-24T09:20:28+08:002022-04-24T09:20:28+08:00 sed是正确的方向!按照https://www.grymoire.com/Unix/Sed.html#uh-1之类的教程进行操作;最基本的方法是 echo $string | sed 's;old;replacement;g' 命令在哪里s,即“搜索和替换”,g是表示“在每一行上重复直到完成”的标志,old是您想要替换的内容(/在您的情况下),replacement也是您想要替换它的内容。(您可能需要转义反斜杠,所以\\/.) 玩得开心! guest_7 2022-04-24T09:46:50+08:002022-04-24T09:46:50+08:00 你可以按照这些思路做一些事情。 # let str='/tmp/something' str_esc=$(printf '%s\n' "$str" | sed 's:/:\\&:g')
您可以使用 Bash 自己的变量操作方法(参数扩展)来做到这一点,尽管语法相当可怕:
为了进一步解释这一点,在 bash 中的
${var//xxx/yyy}
意思是“获取变量var
并将所有出现的地方替换为xxx
.yyy
”。在这种情况下,您需要在指定替换和替换时转义斜线;前者\/
用于单个正斜杠,后者\\\/
用于反斜杠加正斜杠,因此您最终会得到可笑的外观${string//\//\\\/}
。切记不要使用
echo
来显示其内容,因为取决于实现或环境,echo
可能会自己处理反斜杠字符。sed
是正确的方向!按照https://www.grymoire.com/Unix/Sed.html#uh-1之类的教程进行操作;最基本的方法是命令在哪里
s
,即“搜索和替换”,g
是表示“在每一行上重复直到完成”的标志,old
是您想要替换的内容(/
在您的情况下),replacement
也是您想要替换它的内容。(您可能需要转义反斜杠,所以\\/
.)玩得开心!
你可以按照这些思路做一些事情。