使用 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” OR “nonAB+CD”)。
请注意,+ 是字符串的一部分。我想将其视为字符串(字符),而不是算术运算。

我使用管道来执行 AND。并使用 \| 来执行 OR。所以我的命令是:

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

相关内容