我有类似的单词
MEdIa
media
MEDIA
mEdIa
_media_
_media
media_
ICP_MEDIA
在文件中。我正在尝试从下面的命令中grep关键字媒体
grep -irwE "media|*_media"
但是grep只能找到
MEdIa
media
MEDIA
mEdIa
_media
找不到_media_
、media_、ICP_media
要回答您的问题:为什么grep没有找到所有匹配项
-w, --word-regexp
:只选择那些包含匹配项的行,这些匹配项构成整个单词。测试是匹配的子字符串必须是在行的开头,或前面有一个非单词成分性格同样,它必须位于行的末尾或后面跟着一个非单词组成字符。单词的组成字符是字母、数字和下划线。如果同时指定了-x
,则此选项无效。
因此条目_media_
与media
或*media_
不匹配,原因如下:
_media_
与media
不完全匹配,因为它缺少下划线- 相对于
*media_
,_media_
不是一个完整的单词匹配,因为在正则表达式中,正则表达式开头的星号只是一个星号,失去了它的特殊含义。由于*
与_
不同,因此不存在匹配
我确信拥有更好regex-foo的人可以提供更好的解决方案,但这对我来说适用于选定的一组值(见下文(:
cat file.txt | grep -iwE "media|.*[b_]media[b_]*"
_media_
media
ICP_MEDIA
值:
_media_
media
ICP_MEDIA
XXX_media_YYY
NOTMEDIA
NOT_MEDIAXX
我在你举的例子中试过这个:
cat find | grep 'media'
结果是:
media
_media_
_media
media_
p.Sfind
是我把你的例子放在.中的文件名