linux – 基于黑名单的grep – 没有程序代码?

linux – 基于黑名单的grep – 没有程序代码?,第1张

概述这是一个众所周知的任务,很容易描述: 给定一个文本文件foo.txt和一个排除字符串的黑名单文件,每行一个,生成foo_filtered.txt,它只包含不包含任何排除字符串的foo.txt行. 常见的应用程序是从构建日志中过滤编译器警告,但忽略对不属于您的文件的警告.文件foo.txt是警告文件(本身从构建日志中过滤掉),黑名单文件excluded_filenames.txt,文件名,每行一个. 这是一个众所周知的任务,很容易描述:

给定一个文本文件foo.txt和一个排除字符串的黑名单文件,每行一个,生成foo_filtered.txt,它只包含不包含任何排除字符串的foo.txt行.

常见的应用程序是从构建日志中过滤编译器警告,但忽略对不属于您的文件的警告.文件foo.txt是警告文件(本身从构建日志中过滤掉),黑名单文件excluded_filenames.txt,文件名,每行一个.

我知道它是如何在像Perl或AWK这样的过程语言中完成的,我甚至用剪辑,通信和排序等Linux命令组合完成了它.

但我觉得我应该与xargs非常接近,而且看不到最后一步.

我知道如果excluded_filenames.txt中只有1个文件名,那么

grep -v foo.txt `cat excluded_filenames.txt`

会做的.

而且我知道我可以获得每行一个文件名

xargs -L1 -a excluded_filenames.txt

那么如何将这两者合并为一个解决方案,而不使用过程语言中的显式循环?

寻找简单而优雅的解决方案.

解决方法 你应该使用-f选项(或者你可以使用相同的fgrep):

grep -vf excluded_filenames.txt foo.txt

您也可以使用-F,它更直接地解答您的问题:

grep -vF "`cat excluded_filenames.txt`" foo.txt

来自man grep

-f file,--file=file          Obtain patterns from file,one per line.  The empty file contains zero patterns,and therefore matches nothing.-F,--fixed-strings          Interpret PATTERN as a List of fixed strings,separated by newlines,any of which is to be matched.
总结

以上是内存溢出为你收集整理的linux – 基于黑名单的grep – 没有程序代码?全部内容,希望文章能够帮你解决linux – 基于黑名单的grep – 没有程序代码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1023797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存