使用'grep -f'列出不匹配的条目

时间:2013-08-09 02:31:23

标签: parsing if-statement grep

以下命令为我提供了匹配表达式的列表:

grep -f /tmp/list Filename* > /tmp/output

然后解析list文件并用于在Filename*中搜索已解析的字符串。然后,结果会保存到output

在Filename *中没有匹配的情况下,如何从list输出解析后的字符串?

list文件的内容可能是:

ABC
BLA
ZZZ
HJK

示例文件:

Filename1:5,ABC,123
Filename2:5,ZZZ,342

运行命令的结果:

BLA
HJK

通过使用if语句,堆栈溢出问题2480584看起来可能是相关的。但是我不确定如何将解析后的字符串输出到输出文件。需要某种类型的读取线吗?

TIA,

MIC

2 个答案:

答案 0 :(得分:1)

显然,grep -f list Filename*会在list指定的文件中提供文件Filename*中所有模式的匹配,即

Filename1:5,ABC,123
Filename2:5,ZZZ,342

在你的例子中。

通过添加-o(仅打印匹配表达式)和-h(不打印文件名)标志,我们可以将其转换为:

ABC
ZZZ

现在您希望list中所有未包含在此列表中的模式,可以通过

实现
grep -f list Filename* -o -h | grep -f /dev/stdin -v list

其中第二个grep从第一个输出获取模式,并使用-v标志给出了与这些模式不匹配的文件list的所有行。

答案 1 :(得分:0)

这就是:

$ grep -v "$(cat Filename* | cut -d, -f2)" /tmp/list
BLA
HJK

解释

$ cat Filename* | cut -d, -f2
ABC
ZZZ

然后grep -v寻找反向匹配。