Linux ^[:blank:]与sed中的点不匹配
我的意见如下: INa.aa。。。。。。。。。。。。。。。。。。。2010年10月,之前位于美国的所有者未能偿还债务 我的目标是在每个以字母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:
i
/i
开头的单词周围放上括号。于是我发出命令:
sed 's/\<i[^[:blank:]]*\>/(&)/gi' input_data
sed's/\/(&)/gi'输入数据
返回此输出的:
(INa.aa)。。。。。。。。。。。。。。。。。。。2010年10月,之前在美国的所有者未能偿还债务
我不明白的是,为什么^[:blank:*
后面的INa.aa
不也包括点
谢谢您的建议。您可以使用
\>
“词尾”转义。单词边界定义为
左边的字符是“单词”字符,右边的字符是“非单词”字符,反之亦然
在中(参考\b
)。在\>
的情况下,“反之亦然”不适用
什么是“单词”字符
“单词”字符是任何字母、数字或下划线字符
和“非文字”是所有其他的。您期望句点和空白之间的边界匹配<代码> \>代码>,但它没有:句柄和空白都是非单词字符。单词边界位于最后一个a
和第一个
之间
a
s之间的句点也被单词边界所包围,但是因为没有任何空格,所以它是匹配的一部分
如果您想将所有内容匹配到下一个空格,您可以跳过正则表达式中的
\>
。回答得很好,甚至不知道我可以跳过结束\>。谢谢