将文件列表传递给 grep

2024-04-25

我有一个文件中的文件列表。该列表很大,并且文件名是非标准的:这意味着,有些文件名包含空格、非 ascii 字符、引号、单引号...

所以,通过那个huge不能选择将文件列表作为 grep 参数:

  • 因为我不确定我不会超过linux允许的参数长度。我想我可以通过对参数进行分区来解决这个问题xargs, 尽管。
  • 因为转义这些字符很复杂。如果我想将文件名括在双引号中,而该文件名恰好有双引号,那么我就有麻烦了。所以我需要转义一些字符。整个事情看起来很复杂,我不想走那条路。

必须有一种更简单的方法:如何告诉 grep 使用我的文件列表作为 grep 的来源文件?我认为由于 shell 不会处理文件列表,因此转义和参数长度不再是问题。问题是grep是否支持这种操作方式,我在文档中一直找不到。


据我所知,GNU grep 不支持这一点。你有几个选择。

使用 bash 循环来解析文件列表

这是@fedorqui提供的解决方案

while read file; do 
    grep "$PATTERN" "$file" 
done < file_with_list_of_files

使用 xargs 一次将多个文件传递给 grep

这里我告诉 xargs 将 10 个文件名传递给 grep

PATTERN='^$' # searching for blank lines
xargs -n 10 -d '\n' grep "$PATTERN" < file_with_list_of_files

使用 xargs 将多个文件一次传递给 grep,处理文件名中的换行符

如上所述,但使用空终止行

PATTERN='^$' # searching for blank lines
tr '\n' '\0' file_with_list_of_files
xargs -n 10 -0 grep "$PATTERN" < file_with_list_of_files

Edit:正确处理空白Edit2:删除产生乱码输出的示例,添加处理换行符的示例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文件列表传递给 grep 的相关文章

随机推荐

  • 如何使用 antd upload React 发送 multipart/form-data

    我正在使用 React 和 antd 我使用的 antd 组件是拖放 https ant design components upload 我正在尝试使用 FormData 对象发送多部分 表单数据 它发送文件 应作为 blob 发送的 z
  • 有什么方法可以更改 VSCode 中仅注释代码的字体系列吗?

    我在用户设置中遇到过这个 editor fontFamily Consolas Courier New monospace 但有什么办法只改变评论的字体吗 我在其他编辑器中看到人们有半草书评论 我希望能够复制类似的内容 您可以更改字体sty
  • .NET 中的 CoCreateInstance 完全匹配吗?

    我有进程内 DLL COM 服务器 但我选择以 DllSurrogate 身份运行 因此从非托管代码 Delphi 中我有 function TComWrapper GetServer IUnknown begin OleCheck CoC
  • 如何在Android webview中永久保存cookie?

    通过下面的代码 我已经能够保存 cookie 但是一旦我关闭应用程序 cookie 就会消失 这是如何引起的以及如何解决 package com jkjljkj import android app Activity import andr
  • 修复js“脚本错误”

    我在实现一些简单的事情时遇到困难 我有一个 index html 文件http 本地主机 3200 http localhost 3200由 ruby on Rails 编写 它使用 javascript 文件http 本地主机 8000
  • MongoDb 聚合 - 项目值作为键,相应的数组值作为值

    在 mongodb 中 运行聚合后我有一个以下形状的 get 对象 id 1 specificationList key Memory Storage Features values key Internal Storage value 3
  • KeyError:“无法打开属性(无法定位属性:'nb_layers')”

    我有一个Python代码 使用Keras 我没有发布代码 因为代码有点长 而且问题似乎与代码本身无关 这是我遇到的错误 File h5py h5a pyx line 77 in h5py h5a open D Build h5py h5py
  • 在 numpy 中获取日志返回的最有效方法是什么

    构建日志返回序列的最快且最优雅的解决方案是什么 问题主要在于映射一个函数 该函数将第 i 个和第 i 1 个元素作为数组中每个元素的输入 对于函数和简单数组 我可以定义日志返回 如下所示 import numpy as np ar np r
  • 显示哪些与特定模式匹配的文件在 git 分支之间发生了更改

    我想合并两个分支 但在此之前 我想检查文件名以以下字符结尾的所有文件上两个分支之间的更改 twig 是否可能 或者我应该使用一些 bash magic 像git diff name only branch1 branch2 grep twi
  • 为家庭作业选择 Java IDE [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能推荐一个轻量级的 Java IDE 不需要您每次编译和运行程序时都创建新项目 我只想能够打开jav
  • 意外的 身体行为,因为它被孩子的 margin-top 向下推 [重复]

    这个问题在这里已经有答案了 HTML 问题看起来总是那么简单 以至于我几乎觉得问这些问题很尴尬 但不管怎样 我不知道为什么会发生这种情况 在这个小提琴里http jsfiddle net o5ee1oag 2 http jsfiddle n
  • 单击回收器视图

    有谁用过RecyclerView找到了一种方法来设置onClickListener到项目中的RecyclerView 我想过为每个项目的每个布局设置一个监听器 但这似乎有点太麻烦了 我确信有办法RecyclerView聆听onClick事件
  • NodeJS TLS会话ID

    我正在使用 TLS 使用 node js 库创建会话 Node js 是否提供了一种方法来检索已建立的 TLS 连接的会话 ID 它是 openssl 中 SSL ctx 的一部分 不使用 connect express 或geddy 可以
  • WPF 复选框内容不正确

    我的问题是我的复选框内容不显示下划线或 象征 我读过有关RecognizeAccessKey属性 但我无法让它工作 我的列表框如下所示
  • C# 构造函数不能调用自身

    构造函数 Delay vkMessages vkMessages string System DateTime string bool string 无法调用自身 我有另一个类 该类的副本 但它可以工作 我可以添加代码 我如何解决这个问题错
  • 尝试以特殊行为渲染 Threepenny-gui 中的字段

    我想要做的是设置字段 当它们处于焦点时显示详细信息 而当它们不处于焦点时显示摘要 例如 A 当它失去焦点 变得模糊 时 我将值保存在 状态 映射中 然后将该值更改为旧值的函数 即汇总值 b 当它获得焦点时 我用我在地图中保存的旧值替换摘要值
  • Emacs 关于 python 模式函数的默认提示

    在 python 模式下 有一个名为 py execute region 的函数 它将突出显示的代码区域发送到 Python 缓冲区进行评估 评估后 光标位于 Python 缓冲区中 但我希望它保留在脚本缓冲区中 以便我可以继续生成更多代码
  • 如何仅使用 jQuery 垂直调整 DIV 大小 - 无需插件?

    Edit 我把这段代码放在jsbin中 http jsbin com eneru http jsbin com eneru 我试图让用户使用 jQuery 调整 DIV 元素的大小 仅垂直 我读到了有关 jQuery UI 的内容 我尝试了
  • 某些 exe 中的 OpenFileMapping 访问被拒绝

    我有一个程序使用写入变量 CreateFileMapping INVALID HANDLE VALUE NULL PAGE EXECUTE READWRITE 0 sizeof data Local testtest 然后我将 dll 加载
  • 将文件列表传递给 grep

    我有一个文件中的文件列表 该列表很大 并且文件名是非标准的 这意味着 有些文件名包含空格 非 ascii 字符 引号 单引号 所以 通过那个huge不能选择将文件列表作为 grep 参数 因为我不确定我不会超过linux允许的参数长度 我想