Linux ^[:blank:]与sed中的点不匹配

Linux ^[:blank:]与sed中的点不匹配,linux,bash,sed,Linux,Bash,Sed,我的意见如下: INa.aa。。。。。。。。。。。。。。。。。。。2010年10月,之前位于美国的所有者未能偿还债务 我的目标是在每个以字母i/i开头的单词周围放上括号。于是我发出命令: sed 's/\<i[^[:blank:]]*\>/(&)/gi' input_data sed's/\/(&)/gi'输入数据 返回此输出的: (INa.aa)。。。。。。。。。。。。。。。。。。。2010年10月,之前在美国的所有者未能偿还债务 我不明白的是,为什么^[:blank:

我的意见如下:

INa.aa。。。。。。。。。。。。。。。。。。。2010年10月,之前位于美国的所有者未能偿还债务

我的目标是在每个以字母
i
/
i
开头的单词周围放上括号。于是我发出命令:

sed 's/\<i[^[:blank:]]*\>/(&)/gi' input_data
sed's/\/(&)/gi'输入数据
返回此输出的:

(INa.aa)。。。。。。。。。。。。。。。。。。。2010年10月,之前在美国的所有者未能偿还债务

我不明白的是,为什么
^[:blank:*
后面的
INa.aa
不也包括点


谢谢您的建议。

您可以使用
\>
“词尾”转义。单词边界定义为

左边的字符是“单词”字符,右边的字符是“非单词”字符,反之亦然

在中(参考
\b
)。在
\>
的情况下,“反之亦然”不适用

什么是“单词”字符

“单词”字符是任何字母、数字或下划线字符

和“非文字”是所有其他的。您期望句点和空白之间的边界匹配<代码> \>代码>,但它没有:句柄和空白都是非单词字符。单词边界位于最后一个
a
和第一个
之间

a
s之间的句点也被单词边界所包围,但是因为没有任何空格,所以它是匹配的一部分


如果您想将所有内容匹配到下一个空格,您可以跳过正则表达式中的
\>

回答得很好,甚至不知道我可以跳过结束\>。谢谢