我在一个文件中有一个值列表:
item2
item3
item4
我希望在行如下所示时从另一个文件中删除整行:
item1|XXXX|ABCD
item2|XXXX|ABCD
item3|XXXX|ABCD
item4|XXXX|ABCD
item5|XXXX|ABCD
所以我离开了:
item1|XXXX|ABCD
item5|XXXX|ABCD
是否有bash
序列来执行此操作?
答案 0 :(得分:2)
grep -vf
可以完成这项工作:
grep -vFf file1 file2
item1|XXXX|ABCD
item5|XXXX|ABCD
答案 1 :(得分:2)
如果您的独特标记是|XXXX|ABCD|
字符串,则可以grep
出来:
$ grep -vF '|XXXX|ABCD|' input > output
使用选项-F
(固定字符串)更安全,因为您的模式非常接近于包含正则表达式元字符(即在您的情况下:|
- 它在默认grep
中不活动正则表达式语法,但你不想在使用简单模式时担心这一点。)
如果您的独特模式是该行的其余部分,则可以使用grep
的{{1}}选项将整个文件用作模式列表:
-f
答案 2 :(得分:2)
要求救援!
$ awk -F"|" 'NR==FNR{a[$1];next} !($1 in a)' remove items
item1|XXXX|ABCD
item5|XXXX|ABCD
其中要删除的项目列表位于文件“remove”中,数据位于文件“items”
中