加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – “grep”是否有最多可以处理的文件?

发布时间:2020-12-16 01:58:00 所属栏目:安全 来源:网络整理
导读:我跑了: grep "" *.txt out.txt 在1500个文件上.输出只包含几百个文件..为什么? 使用时: cat *.txt out.txt 这有效,但我希望文件名为行名. 谢谢! 解决方法 你确定所有的文件都真的出现在cat * .txt中出来吗?除非你在每个命令的最大字符数的边缘,否则它
我跑了:

grep ""  *.txt > out.txt

在1500个文件上.输出只包含几百个文件..为什么?

使用时:

cat  *.txt > out.txt

这有效,但我希望文件名为行名.

谢谢!

解决方法

你确定所有的文件都真的出现在cat * .txt>中出来吗?除非你在每个命令的最大字符数的边缘,否则它应该没有区别.试试这个:

ls -1 | egrep '.txt$' | xargs egrep "" /dev/null > out

ls -1列出目录中的所有文件,每行一个文件名,第一个egrep过滤掉以“.txt”结尾的文件名.这样,您不必担心列出文件时命令行长度不足. xargs读取stdin,直到它获得尽可能多的行,因为它可以在xargs的其他参数之后放在单个命令行上.然后,它会使用您提供的选项调用您提供的命令.然后xargs重复该过程,直到它耗尽您提供的所有参数.每次调用最终egrep都会写入同一个stdout,因此所有输出都会转到同一个文件中.

/ dev / null是在xargs只找到一行输入的情况下(例如,因为你只有一个文件或捆绑文件时,最后一个包只有一个文件).如果您使用单个文件调用egrep,则不会打印文件名.因为你特别说你想要文件名,告诉egrep搜索/ dev / null保证总会有至少两个文件.由于/ dev / null保证为空,因此您将永远不会在其中找到任何内容,并且它不会显示在您的输出中.

xargs非常适合find.如果要在当前目录及其子目录中的所有“.txt”文件中搜索“foo”:

find . -name "*.txt" -print | xargs egrep foo /dev/null

会做的伎俩.如果你的文件名中包含空格,它们就不会被引用而且egrep会混淆,所以在find上使用-print0选项并在xargs上使用-0选项:

find . -name "*.txt" -print0 | xargs -0 egrep foo /dev/null

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读