我需要 grep 搜索字符“james”。问题是它们可以按任何顺序排列,并且它们中的任何一个都可以大写。例如,需要找到以下内容..
这只是几种可能性,显然还有更多的组合。
如果可能,这需要使用一个 grep 语句来完成。grep 搜索是通过软件 Encase 而不是在 unix 机器上完成的。输入只接受一个 grep 命令。是否可以在一个声明中做到这一点?
这是一个有趣的正则表达式:
/ (?=.{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修饰符使其不区分大小写。
把它放进去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标志使其不区分大小写。