为什么grep找不到以下划线开头的单词



我有类似的单词

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是我把你的例子放在.中的文件名

相关内容

  • 没有找到相关文章

最新更新