
我有這兩個 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]'