只想转义 Windows 文件路径中的空格。我正在尝试这样做:
echo "111 1111 "| sed -e "s/[[:space:]]/\\ /g"
仅匹配空格但不替换。
答案1
如果使用双引号,bash
则会解释\\
并输出\
,然后再次从sed
与以下空格一起解释为仅空格。
因此,您还需要一个反斜杠:
echo "111 1111 " | sed -e "s/[[:space:]]/\\\ /g"
但最好使用单引号来防止 bash 解释:
echo "111 1111 " | sed -e 's/[[:space:]]/\\ /g'
输出:
111\ \ 1111\
替代方法:
如果您将文件路径作为变量,则可以使用 Shell 方法:
path="111 1111 "
echo ${path// /\\ }
答案2
[[:space:]]
不只是匹配空格,而是所有空白字符包括制表符和换行符。如果你真的想要,GNU (比如在 Ubuntu 中)有它的sed
简写类:\s
sed 's_\s_\\&_g'
这将用反斜杠 ( ) 和其本身s
替换每行中的每个 ( g
) 空格字符(\s
,匹配嵌入在模式/保留空格中的空格、制表符和换行符)\\
-&
即整个匹配模式。我使用不同的分隔符,因为斜杠和反斜杠放在一起总是看起来令人困惑;s/\s/\\&/g
当然也是有效的。
如果你只想替换空间字符,而是使用:
sed 's_ _\\&_g'
示例运行
$ echo "111 1111 " | sed 's_ _\\&_g'
111\ \ 1111\
有关字符类别的进一步阅读,请参阅这里是regular-expressions.info。