如何使用 bash 查找某个文件中的哪些行不是由另一个文件中的行开头的



>我有两个文本文件,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

您可以尝试结合使用 xargscatgrep

将每行的首字母保存到第一个字母列表中。您可以通过一些catsed工作来做到这一点。

这个想法是获取黑名单,然后将其与有趣的文件进行匹配。

cat file1.txt | xargs grep ^[^[$FIRSTLETTERLIST]]

这是未经测试的,所以我不保证它会起作用,但它应该为你指明正确的方向。

相关内容

  • 没有找到相关文章

最新更新