Yurij Asked: 2018-12-15 06:37:37 +0800 CST2018-12-15 06:37:37 +0800 CST 2018-12-15 06:37:37 +0800 CST 使用 sed 将每个空格替换为反斜杠 772 只想在 Windows 文件路径中转义空格。我正在尝试这个: echo "111 1111 "| sed -e "s/[[:space:]]/\\ /g" 只匹配空格但不替换。 command-line sed text-processing windows-subsystem-for-linux 2 个回答 Voted Best Answer pLumo 2018-12-15T06:44:06+08:002018-12-15T06:44:06+08:00 如果您使用双引号,则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// /\\ } dessert 2018-12-15T11:48:09+08:002018-12-15T11:48:09+08:00 [[:space:]]不仅匹配空格,还匹配所有空格字符,包括制表符和换行符。如果你真的想要,GNU sed(就像在 Ubuntu 中一样)有它的速记类\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。
如果您使用双引号,则
bash
解释\\
和输出\
,然后再次将sed
其与以下空格一起解释为仅空格。所以你需要一个反斜杠:
但最好使用单引号来防止 bash 解释:
输出:
替代方法:
如果您将文件路径作为变量,则可以使用 Shell 方法:
[[:space:]]
不仅匹配空格,还匹配所有空格字符,包括制表符和换行符。如果你真的想要,GNUsed
(就像在 Ubuntu 中一样)有它的速记类\s
:这用
s
反斜杠 ( ) 替换每行中的每个 (g
) 空白字符 (\s
,匹配嵌入在模式/保留空格中的空格、制表符和换行符\\
),并且它本身 -&
是整个匹配的模式。我使用了不同的分隔符,因为斜杠和反斜杠总是看起来很混乱。s/\s/\\&/g
当然也是有效的。如果您只想替换空格字符,请使用:
示例运行
有关字符类的进一步阅读,请参见regular-expressions.info。