Grep
grep:正則表達式搜尋所有但不搜尋
我很好奇,在過去的幾十年裡我收集了多少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