我似乎使用扩展正则表达式匹配了两件事:
- 换行。我试过了
[ \n]
,,[ \\n]
都不起作用 - 字符串“timeout”的负向前瞻。我试过 (?!timeout)
有人能指出正确的方法吗?
答案1
新队
如果你使用 bash,你可以写$'\n'
。这将由 shell 而不是程序进行扩展,因此它比其他选项更可靠。
如果您使用破折号(例如,在 shell 脚本中),您始终可以使用文字引用换行符:
'
'
虽然不优雅,但确实有效。
展望
您必须使用 Perl 兼容正则表达式 ( -P
),因为扩展正则表达式不支持前瞻。
通常情况下,模仿负面前瞻。
使用 grep 的-v
开关通常可以实现这一点:
grep -E 'PATTERN' | grep -vE 'PATTERNtimeout'
相当于
grep -P 'PATTERN(?!timeout)'
要模仿(?!timeout)
另一个表达式,可以使用以下子表达式:
(($|[^t])|t($|[^i])|ti($|[^m])|tim($|[^e])|time($|[^o])|timeo($|[^u])|timeou($|[^t]))
($|[^t])
字符串在此处结束或第一个字符不是吨。t($|[^i])
字符串结束于吨或第二个字符不是我。ti($|[^m])
字符串结束于钛或第三个字符不是蒂姆。- ...
如果以上任何一个匹配,则字符串不是暂停。