![使用 grep 进行逻辑 AND 和 OR](https://linux22.com/image/1563007/%E4%BD%BF%E7%94%A8%20grep%20%E8%BF%9B%E8%A1%8C%E9%80%BB%E8%BE%91%20AND%20%E5%92%8C%20OR.png)
我想提取符合以下逻辑操作的行:
"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