以下命令为我提供了匹配表达式的列表:
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
答案 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
寻找反向匹配。