grep が正規表現に一致する項目を見つけられませんでした。

grep が正規表現に一致する項目を見つけられませんでした。

数字はゼロで始めることはできません。

reg exを使用してこのgrepコマンドを実行しました。

❯ echo "#time 1m" | grep -E -o "#time\s(?!0)\d{1,2}[m|h|d]"

次の出力を取得します。

zsh: event not found: 0

グラフィックレジストリ拡張テスターで試した結果、一致することがわかりました。ここに画像の説明を入力してください。

ベストアンサー1

zsh: event not found: 0

これは、シェルが!履歴拡張をトリガとして扱うためです。文字列を一重引用符で囲むか、zshまたはBashでset +o histexpand使用して履歴拡張を無効にします。たとえば、参照してください。setopt nohistexpandset +HBashの感嘆符(!)を理解する

... grep -E -o "#time\s(?!0)\d{1,2}[m|h|d]"

\s(?!...)およびはPerl\d正規表現の一部であり、grep -E使用される標準拡張正規表現ではありません。[m|h|d]、またはいずれかの単一文字と一致します。これを書く方が良いかもしれませんが、それを意味するかもしれません(またはそれを書くより長い方法です)。m|hd[mhd|][mhd](m|h|d)

正規表現を標準のEREに書き換えるか、grep -PGNU grepなどのPerl正規表現を使用できるツールに切り替える必要があります。

バラより私の正規表現がXでは動作しますが、Yでは動作しないのはなぜですか?

おすすめ記事