Grep多个文件,其文件名存储在变量中

迈克·卡茨45

考虑变量files

$ echo $files
1.txt 2.txt 3.txt

有没有办法告诉grep它必须对单个字符串中出现在变量中的每个文件进行grep?我试过了:

$ grep "string" "$files"

但是我得到一个1.txt 2.txt 3.txt No such file of directory错误。自从我使用外壳进行工作以来已经有一段时间了,所以我不记得如何进行这项工作。

大卫·兰金

带有存储在的文件名列表files,例如

files="1.txt 2.txt 3.txt"

当你引用"$files"(做好引用您的变量),并尝试使用"$files"grep命令字分割上的内容$files不会发生?为什么?报价可以防止单词分裂,因此会grep尝试查找命名"1.txt 2.txt 3.txt"为当然不会退出并生成错误的文件。

你可以用grep$files简单地使用$files未引用-但这不是要走的路。为什么?存储用于命令的文件名时,必须确保存储的文件集合可以处理所有有效的文件名。这包括带空格的文件名。如果您尝试将无引号的方法用于:

files="file 1.txt file 2.txt file 3.txt"

使用grep(或任何命令)与未加引号$files将失败找6个文件,file1.txtfile2.txtfile3.txt

BashFAQ#50中,特别是在5中详细描述和讨论了这个问题。我正在基于仅在运行时才知道的信息构造命令解决方案是将文件名存储在数组中(如果需要存储的话)。正如@Jetchisel指出的那样,可以通过简单地将其创建files为数组来处理

files=(*.txt)

(或files=([1-3].txt)来限制选择到1.txt2.txt3.txt

通过使用数组,您可以使用带引号的形式,"${files[@]}"形式将为单独引用的命令提供每个文件名,例如

grep "string" "${files[@]}"

将扩展为:

grep "string" "1.txt" "2.txt" "3.txt"

这样,无论文件名是什么,无论文件名是否包含空格,grep都将看到正确的文件名。例如:

files=("file 1.txt" "file 2.txt" "file 3.txt")

使用带引号的数组形式grep将导致:

grep "strings" "file 1.txt" "file 2.txt" "file 3.txt"

因此,您最初的问题是由抑制单词拆分引起的,但是您尝试使用文件名列表本身就很成问题。如果您需要捕获变量中的文件名列表,则出于上述原因,请使用数组。如果您可以避免将它们全部存储起来,而只是将grep命令与glob这样的glob一起使用*.txt,则可以避免这两个问题开始。

如果您还有其他问题,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文件名存储在变量中

来自分类Dev

存储文件名的变量

来自分类Dev

如何使用sed写入存储在变量中的文件名?

来自分类Dev

忽略grep中的文件名

来自分类Dev

忽略grep中的文件名

来自分类Dev

Spark读取的文件夹目录,其文件名包含在结果数据框中

来自分类Dev

输出带有存储在变量中的文件名的文件内容

来自分类Dev

包含中的 Twig 变量文件名

来自分类Dev

将文件名存储在变量中,减去扩展名

来自分类Dev

文件名中带有空格的grep文件

来自分类Dev

命令行批处理从其文件名中删除_

来自分类Dev

访问作为文件名存储在数据库中但存储在laravel公共文件夹中的多个图像

来自分类Dev

如何在SSIS变量中存储“完全限定”和“仅名称”文件名

来自分类Dev

将head与存储在变量中的文件名一起使用的语法

来自分类Dev

打开路径和文件名存储在字符串变量中的工作簿

来自分类Dev

在excel中根据变量文件名VBA打开文件

来自分类Dev

从上传的多个文件中获取文件名

来自分类Dev

删除多个ZIP文件中的特定文件名

来自分类Dev

文件名中带有多个`.`的mv文件

来自分类Dev

PDI - 基于文件名中的日期的多个文件输入

来自分类Dev

在目录中查找所有文件并列出其文件名的功能,但不包括路径,大小和类型?

来自分类Dev

在Windows中,一个具有递归for循环的批处理文件,其文件名包括空格

来自分类Dev

perl-目录中的grep文件名

来自分类Dev

如何根据文件名创建多个目录并在linux中更改文件名?

来自分类Dev

将文件名存储在数组中Swift

来自分类Dev

如何从Android的内部存储中读取文件名

来自分类Dev

JOIN无法识别存储在MAPFILE元素中的文件名

来自分类Dev

将文件名存储到Mysql表中

来自分类Dev

无法在数据库中存储文件名

Related 相关文章

  1. 1

    文件名存储在变量中

  2. 2

    存储文件名的变量

  3. 3

    如何使用sed写入存储在变量中的文件名?

  4. 4

    忽略grep中的文件名

  5. 5

    忽略grep中的文件名

  6. 6

    Spark读取的文件夹目录,其文件名包含在结果数据框中

  7. 7

    输出带有存储在变量中的文件名的文件内容

  8. 8

    包含中的 Twig 变量文件名

  9. 9

    将文件名存储在变量中,减去扩展名

  10. 10

    文件名中带有空格的grep文件

  11. 11

    命令行批处理从其文件名中删除_

  12. 12

    访问作为文件名存储在数据库中但存储在laravel公共文件夹中的多个图像

  13. 13

    如何在SSIS变量中存储“完全限定”和“仅名称”文件名

  14. 14

    将head与存储在变量中的文件名一起使用的语法

  15. 15

    打开路径和文件名存储在字符串变量中的工作簿

  16. 16

    在excel中根据变量文件名VBA打开文件

  17. 17

    从上传的多个文件中获取文件名

  18. 18

    删除多个ZIP文件中的特定文件名

  19. 19

    文件名中带有多个`.`的mv文件

  20. 20

    PDI - 基于文件名中的日期的多个文件输入

  21. 21

    在目录中查找所有文件并列出其文件名的功能,但不包括路径,大小和类型?

  22. 22

    在Windows中,一个具有递归for循环的批处理文件,其文件名包括空格

  23. 23

    perl-目录中的grep文件名

  24. 24

    如何根据文件名创建多个目录并在linux中更改文件名?

  25. 25

    将文件名存储在数组中Swift

  26. 26

    如何从Android的内部存储中读取文件名

  27. 27

    JOIN无法识别存储在MAPFILE元素中的文件名

  28. 28

    将文件名存储到Mysql表中

  29. 29

    无法在数据库中存储文件名

热门标签

归档