Grep

grep:正則表達式搜尋所有但不搜尋

  • January 12, 2022

我很好奇,在過去的幾十年裡我收集了多少BibTeX條目。所以我對自己說:“讓我們為此編寫一個快速腳本吧!”

對於那些不熟悉 BibTeX 的人:每個條目都以類型標識符開頭,例如@book@article@incollection。實際上,定義了超過 50 種不同的 tpye 標識符,但是將來可能會擴展嗎?通常(但不一定)此標識符位於行首。所以我的 regexp No. 1 應該包含[[:space:]]*@\w+以匹配條目的起始行。

不幸的是,有三個標識符,它們啟動參考書目來源@comment@string@preamble。我偶爾會在我的文件中使用其中的一些。為了匹配這些,我應該寫 regexp No. 2 like @((comment)|(string)|(preamble)),它工作得很好並且匹配得很好。

但是最後三個表達式不應該算作參考書目項目,因此我的最終正則表達式應該讀作“查找所有 1 號但不是 2 號的正則表達式”

這就是我未能結合這兩個正則表達式組的地方。我通過管道傳遞兩個正則表達式來解決它,第二個使用開關-v反轉結果,但我確信,有一種方法可以將它寫在一個正則表達式中。

當, or (或以這些字元串開頭的任何內容) 如下時,您可以使用負前瞻不匹配:@``comment``string``preamble

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

引用自:https://unix.stackexchange.com/questions/686012