我如何連接這兩個 grep 正規表示式

我如何連接這兩個 grep 正規表示式

我有這兩個 grep 正規表示式

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt

grep -e '[Ee][Ee].*[Yy].*[Yy]' first.txt

如何將這兩個連接成一個正規表示式?

答案1

通過..連接模式?

grep -e '[Yy].*[Yy].[Ee][Ee][Ee][Ee].*[Yy].*[Yy]' first.txt

或者您的意思是本質上對兩種模式進行邏輯與?

如果是後者,你需要偽造它,因為雖然grep有內建的 OR ( |) 和 NOT ( -v; [^]),但它沒有內建的 AND。一種方法是將一個的輸出透過管道傳輸grep到另一個:

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt | grep '[Ee][Ee].*[Yy].*[Yy]' 

另一種方法是使用邏輯 OR(為簡潔起見縮寫)以任一順序尋找串聯的兩種模式:

grep -Ee 'pattern1.*pattern2|pattern2.*pattern1' input.txt

我發現第一個更簡潔且更容易維護。

答案2

您可以透過在每個模式之間使用來同時 grep 兩個模式\|

grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]'

相關內容