答え1
zsh: event not found: 0
これは、シェルが!
履歴拡張をトリガとして扱うためです。文字列を一重引用符で囲むか、zshまたはBashでset +o histexpand
使用して履歴拡張を無効にします。たとえば、参照してください。setopt nohistexpand
set +H
Bashの感嘆符(!)を理解する
... grep -E -o "#time\s(?!0)\d{1,2}[m|h|d]"
\s
、(?!...)
およびはPerl\d
正規表現の一部であり、grep -E
使用される標準拡張正規表現ではありません。[m|h|d]
、またはいずれかの単一文字と一致します。これを書く方が良いかもしれませんが、それを意味するかもしれません(またはそれを書くより長い方法です)。m
|
h
d
[mhd|]
[mhd]
(m|h|d)
正規表現を標準のEREに書き換えるか、grep -P
GNU grepなどのPerl正規表現を使用できるツールに切り替える必要があります。
答え2
REとは何の関係もありません。これにより、シェルは文字列の内部を確認して評価できます。 (エラーメッセージはzsh
.の代わりに.で始まりますgrep
。)これを防ぐには、二重引用符('
)の代わりに一重引用符("
)を使用してください。