echo ' 1 2 3 '|sed 's/[[:space:]]*/_/g'
Run Code Online (Sandbox Code Playgroud)
我想看到_1_2_____3__
作为输出。相反,我将其_1_2_3_
视为输出。我究竟做错了什么??
编辑
另一件让我困惑的事情,我忘了在上面的例子中,这是为什么:
echo ' test1 test2 ' | sed 's/[[:space:]]*/_/g'
Run Code Online (Sandbox Code Playgroud)
显示这个:
_t_e_s_t_1_t_e_s_t_2_
Run Code Online (Sandbox Code Playgroud)
和和...[[:space:]]
之间如何匹配?t
e
s
cuo*_*glm 15
因为您使用*
,这意味着它匹配 0 个或多个空格。所以零个或多个空格被一个下划线代替_
。
尝试:
$ echo ' 1 2 3 ' | sed 's/[[:space:]]/_/g'
_1_2_____3__
Run Code Online (Sandbox Code Playgroud)
请记住,[[:space:]]
它还匹配制表符、换行符、回车符。
笔记
你已经有了答案,但我想指出,在这种简单的情况下,没有必要花哨:
$ echo ' 1 2 3 ' | sed 's/ /_/g'
_1_2_____3__
Run Code Online (Sandbox Code Playgroud)
如果您只想替换空格和制表符,您也可以使用 [ \t] 构造:
$ echo -e " 1\t2 3 " | sed 's/[ \t]/_/g'
_1_2_____3__
Run Code Online (Sandbox Code Playgroud)