如何用grep匹配含‘ice’且允许非空格符号的完整词?
解决方案:修改正则匹配范围
你的需求完全可以实现,问题出在原来正则里的\w只匹配字母、数字和下划线,没法覆盖连字符这类符号。我们只需要把匹配范围改成除空格之外的任意字符就行,具体命令如下:
grep -ioh "[^ ]*ice[^ ]*"
为什么这个命令能生效?
[^ ]:正则里的否定字符集,表示匹配除了空格之外的任意单个字符,这样连字符、感叹号、句号这类符号都能被包含进去。[^ ]*:表示匹配0个或多个非空格字符,放在ice前后,就能把整个被空格分隔的单元(也就是你说的“完整词”)都匹配到,只要这个单元里包含ice。
实际测试例子
对于输入字符串:
The cat is very-nice
运行修改后的命令,会输出:
very-nice
如果还有其他包含ice且带符号的字符串,比如ice-cream、my_ice!,这个命令也能完整匹配并输出它们。
原命令的问题回顾
原来的\w*ice\w*中,\w等价于[a-zA-Z0-9_],连字符不在这个范围内,所以very-nice会被空格和连字符拆分成very-、nice两个部分,只能匹配到包含ice的nice。
内容的提问来源于stack exchange,提问作者Porcac1x
相关产品推荐
相关产品推荐

