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