我有两个文本文件,A和B:
A:
a start
b stop
c start
e start
B:
b
c
如何使用shell(bash ...)命令查找A中哪些行不是来自B的行。在这种情况下,我想得到这个答案:
a start
e start
我可以使用一行命令来实现吗?
答案 0 :(得分:3)
这应该做:
sed '/^$/d;s/^/^/' B | grep -vf - A
sed
命令将从文件/^$/d
获取所有非空行(观察B
命令)并在每行前面添加插入符号^
(以便获得grep
的正则表达式的锚点,并将所有这些都吐到stdout
。然后grep,使用-f
选项(这意味着从文件中获取所有模式,这里的stdin
恰好是-
,感谢-v
符号)并进行反转匹配(感谢文件A
上的{{1}}选项)。完成。
答案 1 :(得分:1)
我认为应该这样做:
sed 's/^/\^/g' B > C.tmp
grep -vEf C.tmp A
rm C.tmp
答案 2 :(得分:0)
您可以尝试结合使用xargs
,cat
和grep
将每行的第一个字母保存到FIRSTLETTERLIST中。您可以使用cat
和sed
工作进行此操作。
我的想法是采用黑名单,然后将其与有趣的文件进行匹配。
cat file1.txt | xargs grep ^[^[$FIRSTLETTERLIST]]
这是未经测试的,所以我不保证它会起作用,但它应该指向正确的方向。