Grep 搜索某些字符任意顺序任意大小写

big*_*012 3 regex grep

我需要 grep 搜索字符“james”。问题是它们可以按任何顺序排列,并且它们中的任何一个都可以大写。例如,需要找到以下内容..

  • 艾姆斯
  • EMAJS
  • 赛马

这只是几种可能性,显然还有更多的组合。

如果可能,这需要使用一个 grep 语句来完成。grep 搜索是通过软件 Encase 而不是在 unix 机器上完成的。输入只接受一个 grep 命令。是否可以在一个声明中做到这一点?

Seb*_*icz 5

这是一个有趣的正则表达式:

/ (?=.{0,4}j)(?=.{0,4}a)(?=.{0,4}m)(?=.{0,4}e)(?=.{0,4}s).{5} /i
Run Code Online (Sandbox Code Playgroud)

这将做的是提前确保字符串“james”中的每个字符在接下来的 5 个字符内匹配,并且i修饰符使其不区分大小写。

Regex101 上的演示

把它放进去grep,你会得到这样的东西:

grep -Pi " (?=.{0,4}j)(?=.{0,4}a)(?=.{0,4}m)(?=.{0,4}e)(?=.{0,4}s).{5} " $file
Run Code Online (Sandbox Code Playgroud)

$file你想grep通过的文件在哪里。请注意,该-P标志需要 GNU grep,并表明该模式是 Perl 风格的正则表达式(本机正则grep表达式,即使使用-E,也不支持前瞻)。该-i标志使其不区分大小写。