gpt4 book ai didi

grep - 将文件列表传递给 grep

转载 作者:行者123 更新时间:2023-12-02 05:41:52 30 4
gpt4 key购买 nike

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

因此,将庞大的文件列表作为参数传递给 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

编辑:正确处理空格编辑2:删除产生乱码输出的示例,添加处理换行符的示例

关于grep - 将文件列表传递给 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793167/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com