繁体   English   中英

如何从S3 grep术语和输出对象名称

[英]How to grep a term from S3 and output object name

我需要grep S3中成千上万个文件的术语,并在一些输出文件中列出这些文件名。 我使用cli很新,因此我一直在本地和s3的一小部分中进行测试。

到目前为止,我已经知道了:

aws s3 cp s3://mybucket/path/to/file.csv - | grep -iln searchterm > output.txt

问题在于连字符。 由于我要复制到标准输出,因此grep中的-l开关返回(标准输入)而不是file.csv

我想要的输出是

file.csv

最终,我需要遍历整个存储桶,然后遍历所有存储桶,以获取

file1.csv
file2.csv
file3.csv

但是我需要首先克服这个障碍。 谢谢!

因为您在STDOUT中打印文件并将其通过管道传输到grep STDIN,所以grep不知道原始文件是file.csv 如果文件列表很长,我会这样做:

while read -r file; do aws s3 cp s3://mybucket/path/to/${file} - | grep -q searchterm && { echo ${file} >> output.txt; }; done < files_list.txt

我无法尝试,因为我无权访问AWS S3实例,但是诀窍是安静地使用grep( -q ),如果找到至少一个匹配项,它将返回true,否则返回false;否则,返回false。 然后,您可以打印文件的名称。

编辑:解释

  1. while循环将遍历files_list.txt每一行
  2. aws命令将在stdout打印此文件
  3. 我们将安静模式( -q )中的stdout重定向到grep该模式充当模式匹配器,如果找到匹配项,则返回true,否则返回false。
  4. 如果grep返回true,则将文件名( ${file} )附加到输出文件中。

EDIT2:其他解决方案

while read -r file; do aws s3 cp s3://mybucket/path/to/${file} - | sed -n /searchpattern/{F;q} >> output.txt; done < files_list.txt

说明

步骤1和2相同,然后:

  1. stdout重定向到sed,它将逐行查找文件,直到找到第一个stream pattern ,然后退出( q ),在输出文件中打印文件名( F )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM