如何使用grep搜索一个词的出现和另一个词的缺失

use*_*654 0 linux search grep command-line

我有一个内容类似于以下内容的文件:

google.com,9,AB+CD,nonAB+nonCD
youtube.com,9,AB+CD,AB+CD
facebook.com,20,AB+CD,nonCD
Run Code Online (Sandbox Code Playgroud)

列数不固定。但是第一列是一个 URL,第二列是一个数字,从第三列开始是用逗号分隔的关键字,但它们因站点而异。

我想计算可以控制行中哪些关键字的 URL(行)数。例如,
1)AB+CD没有nonABnonCD。注意:AB+CD这个词可以出现很多次。2) AB+CD 没有出现nonCD(但如果有别的也可以)

如何在一行中搜索一个字符串并确保不存在另一个字符串。当我使用:

grep 'AB+CD' test.txt > result.txt
Run Code Online (Sandbox Code Playgroud)

它打印找到“AB+CD”的每一行。

如果我想打印只有 'AB+CD' 的行怎么办:

youtube.com,9,AB+CD,AB+CD
Run Code Online (Sandbox Code Playgroud)

或者有 'AB+CD' 和除了 'nonAB' 之外的任何东西:

youtube.com,9,AB+CD,AB+CD
facebook.com,20,AB+CD,nonCD
Run Code Online (Sandbox Code Playgroud)

Bob*_*Bob 5

如果您只想进行纯文本搜索而不关心列,您可以grep -v像这样链接倒排匹配:

cat input.txt | grep 'IncludedText' | grep -v 'ExcludedText'
Run Code Online (Sandbox Code Playgroud)

如果您想按列进行适当的过滤,您需要使用类似awk.