-v
ファイルから単一の単語を除外するために使用できますが、正規表現パターンが/?!
で機能しない理由は疑問に思います。grep
egrep
エディタでファイル検索から単一の単語を除外するパターンを見つけてatom
発見しました。これ協会。この?!
機能はで完全に機能しますatom
。bash
まず閉じる必要があります。histexpand
それ以外の場合はset +H
検索履歴が表示されます-bash: !xxx: event not found
。その後!pattern
、同様のことを試しましたが、パターンを認識できませんでした。なぜこれが起こるのですか?echo "no" | grep "^(?!yes).*"
grep
?!
答え1
$ echo "no" | grep -P '^(?!yes).*'
no
この式は、標準の基本正規表現や標準拡張正規表現ではなく、「Perl Compatible Regular Expression」を意味するPCREです。フラグでユーティリティを使用すると、GNUはgrep
これについて知っています-P
。
式を一重引用符で囲むと(静的文字列なので、そうする必要があります)、拡張パターンは履歴パターンとしてbash
認識されません?!yes
。
GNUgrep
マニュアルから:
-P
、--perl-regexp
パターンをPerl互換正規表現(PCRE)として解釈します。これは実験的で実装
grep -P
されていない機能について警告できます。
bash
マニュアルで(私の強調):
\
バックスラッシュ()のみそして一重引用符歴史的な拡張文字は引用符で囲むことができますが、二重引用符で囲まれた文字列で閉じる二重引用符の直前にある場合でも、引用符と見なされます。