使用 grep 進行邏輯 AND 和 OR

使用 grep 進行邏輯 AND 和 OR

我想提取與以下邏輯運算相符的行:

"AB+CD" AND ("nonAB+nonCD" OR "nonAB+CD"). 

這意味著我想要以下內容:

AB+CD,nonAB+nonCD
AB+CD,nonAB+CD
AB+CD,nonAB+nonCD,nonAB+CD

這意味著我正在尋找帶有“AB+CD”的行或者兩個都(“nonAB+nonCD”或“nonAB+CD”)。
請注意,+ 是字串的一部分。我想將其視為字串(字元)而不是算術運算。

我所做的是使用管道來執行 AND。並使用\|對於手術室。所以我的命令是:

grep ',AB+CD' test.txt | grep ',nonAB+nonCD\|,nonAB+CD'

第一個|是用於管道。第二個是 grep 的邏輯或,如下圖所示參考這給出了 grep 的邏輯或的例子:

grep 'pattern1\|pattern2' filename

在終端顏色中顯示的結果(找到)指令的第二部分。第一部分(在管道|未在彩色結果中突出顯示之前。我的問題:

1)我的命令正確嗎?

2)如何為完整的命令結果著色?

答案1

使用-P選項(PCRE):

grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt

輸出:

AB+CD,nonAB+nonCD
AB+CD,nonAB+CD
AB+CD,nonAB+nonCD,nonAB+CD

相關內容