grep:すべて検索するが検索しない正規表現

grep:すべて検索するが検索しない正規表現

いくつか気になります。書誌辞書ここ数十年にわたって私が収集したアイテムです。だから私は自分に言った。 「これのための簡単なスクリプトを書いてみよう!」

@bookBibTeXに慣れていない人のために:各項目はなどの型識別子で始まります。実際には50以上の異なるタイプ識別子が定義されていますが、これが将来拡張される可能性はありますか?通常(必ずしもそうではない)、識別子は行の先頭に配置されます。したがって、私の正規表現番号1には、一致するエントリの開始行を含める必要があります。@article@incollection[[:space:]]*@\w+

残念ながら、3つの識別子があります。いいえ参考文献ソースの開始:@comment、、@stringおよび@preamble。私は時々私のファイルでこれらのいくつかを使用します。これを一致させるには、うまく機能し、よく一致する正規表現の@((comment)|(string)|(preamble))2回を作成する必要があります。

ただし、最後の3つの式は参考文献項目と見なされるべきではないので、最終正規表現は「1回のすべての正規表現を見つけて2回は見つかりません」でなければなりません。

ここでは、2つの正規表現グループを結合できませんでした。私は2つの正規表現をパイピングしてこの問題を解決しました。 2番目の正規表現はスイッチを使用して-v結果を反転しましたが、1つの正規表現にそれを作成する方法があると確信しています。

ベストアンサー1

あなたはそれを使用することができます否定的な予測一致しない@場合comment(またはこれらの文字列で始まるすべての項目)stringpreamble次のようになります。

grep -P '^[[:space:]]*@(?!comment|string|preamble)\w' file

おすすめ記事