[英]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。 然后,您可以打印文件的名称。
files_list.txt
每一行 aws
命令将在stdout
打印此文件 -q
)中的stdout
重定向到grep
该模式充当模式匹配器,如果找到匹配项,则返回true,否则返回false。 ${file}
)附加到输出文件中。 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相同,然后:
stdout
重定向到sed,它将逐行查找文件,直到找到第一个stream pattern
,然后退出( q
),在输出文件中打印文件名( F
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.