如何从 S3 中 grep 一个术语并输出对象名称
How to grep a term from S3 and output object name
我需要对 S3 中的数千个文件进行 grep 搜索,并在某个输出文件中列出这些文件名。我是使用 cli 的新手,所以我一直在本地和 s3 的一小部分中进行测试。
到目前为止我得到了这个:
aws s3 cp s3://mybucket/path/to/file.csv - | grep -iln searchterm > output.txt
问题在于连字符。由于我正在复制到标准输出,grep returns(标准输入)中的 -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
),如果找到,它将 return 为真至少匹配,否则为假;然后就可以打印文件名了。
编辑:解释
- while 循环将遍历
files_list.txt
的每一行
aws
命令将在 stdout
中打印此文件
- 我们在静默模式 (
-q
) 中将 stdout
重定向到 grep
,它充当模式匹配器,return 如果找到匹配则为真,否则为假聪明
- 如果 grep return 为真,我们将文件名 (
${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
说明
步骤一、二相同,则:
stdout
被重定向到 sed,它将逐行查找文件,直到找到第一个 stream pattern
,然后退出(q
),打印文件名(F
) 在输出文件中。
我需要对 S3 中的数千个文件进行 grep 搜索,并在某个输出文件中列出这些文件名。我是使用 cli 的新手,所以我一直在本地和 s3 的一小部分中进行测试。
到目前为止我得到了这个:
aws s3 cp s3://mybucket/path/to/file.csv - | grep -iln searchterm > output.txt
问题在于连字符。由于我正在复制到标准输出,grep returns(标准输入)中的 -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
),如果找到,它将 return 为真至少匹配,否则为假;然后就可以打印文件名了。
编辑:解释
- while 循环将遍历
files_list.txt
的每一行
aws
命令将在stdout
中打印此文件
- 我们在静默模式 (
-q
) 中将stdout
重定向到grep
,它充当模式匹配器,return 如果找到匹配则为真,否则为假聪明 - 如果 grep return 为真,我们将文件名 (
${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
说明
步骤一、二相同,则:
stdout
被重定向到 sed,它将逐行查找文件,直到找到第一个stream pattern
,然后退出(q
),打印文件名(F
) 在输出文件中。