答案1
zsh: event not found: 0
这是因为 shell 将 视为!
历史扩展的触发器。将字符串放在单引号中,或者使用set +o histexpand
(或setopt nohistexpand
在 zsh 中,或set +H
在 Bash 中)禁用历史扩展。参见例如理解 bash 中的感叹号 (!)
... grep -E -o "#time\s(?!0)\d{1,2}[m|h|d]"
请注意\s
, 、(?!...)
、 和\d
是 Perl 正则表达式的一部分,而不是grep -E
使用的标准扩展正则表达式。此外,还匹配、、或[m|h|d]
之一的任何单个字符。最好写成这样,但你可能是指(或者这只是一种更长的写法)。m
|
h
d
[mhd|]
[mhd]
(m|h|d)
您可能必须将正则表达式重写为标准 ERE,或者切换到可以使用 Perl 正则表达式的工具,例如grep -P
GNU grep。
答案2
这与RE无关。这是允许 shell 看到字符串内部并尝试对其进行评估。 (这就是为什么错误消息以 开头zsh
,而不是grep
.)为了防止这种情况,请使用单引号 ( '
) 而不是双引号 ( "
)