扩展正则表达式换行

Sur*_*ani 1 grep regex

我似乎使用扩展正则表达式匹配两件事:

  1. 新队。我试过了[ \n][ \\n]都不起作用
  2. 字符串“超时”的负前瞻。我试过(?!超时)

任何人都可以指出正确的方法吗?

Den*_*nis 5

新队

如果您使用的是 bash,则可以编写$'\n'. 这由外壳而不是程序扩展,因此它比其他选项更可靠。

如果您使用破折号(例如,在 shell 脚本中),您始终可以使用文字引用的换行符:

'
'
Run Code Online (Sandbox Code Playgroud)

不优雅,但它有效。

展望

您必须使用 Perl Compatible Regular Expressions ( -P),因为扩展的正则表达式不支持前瞻。

很多时候,模仿负面的前瞻就足够了。

使用 grep 的-v开关通常可以实现:

grep -E 'PATTERN' | grep -vE 'PATTERNtimeout'
Run Code Online (Sandbox Code Playgroud)

相当于

grep -P 'PATTERN(?!timeout)'
Run Code Online (Sandbox Code Playgroud)

(?!timeout)在另一个表达式中进行模拟,您可以使用以下子表达式:

(($|[^t])|t($|[^i])|ti($|[^m])|tim($|[^e])|time($|[^o])|timeo($|[^u])|timeou($|[^t]))
Run Code Online (Sandbox Code Playgroud)
  • ($|[^t])字符串在此处结束或第一个字符不是t
  • t($|[^i])字符串在t或第二个字符不是i之后结束。
  • ti($|[^m])字符串在ti或第三个字符不是tim之后结束。
  • ...

如果上述任何一项匹配,则字符串不是timeout