Grep
帶有正則表達式的 grep 找不到匹配項
數字不能以 0 開頭。
我用 reg ex 執行了這個 grep 命令
❯ echo "#time 1m" | grep -E -o "#time\s(?!0)\d{1,2}[m|h|d]"
並獲得以下輸出:
zsh: event not found: 0
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。