Я предполагаю, что из вашей (закомментированной) команды sed
вы хотите, чтобы
соответствовал и заменял регулярное выражение: [1-9] [0-9]?
, что означает
[1-9]
), за которой следует [0-9]?
) , которое является довольно распространенным регулярным выражением для целых чисел от 1 до 99 (без нуля в начале).
Однако $ { параметр / шаблон / строка }
не использует регулярные выражения, он использует шаблоны расширения имени пути (также известные как подстановочные знаки).
Итак, [1-9] [0-9]?
означает
[1-9]
), за которой следует [0-9]
), за которой следует ?
) Тем не менее, это должно было работать для двузначных имен файлов, { {1}}, хотя он потребляет .
и переименуйте 10.jpg
в 46jpg
(без .
).
Что касается другой части вашего вопроса,
//
заменяет все вхождения шаблона ,
while /
заменяет только первый. Например,
$ i=cataract
$ echo "${i/a/X}"
cXtaract
$ echo "${i//a/X}"
cXtXrXct
Я считаю, что самый быстрый способ - сначала скопировать их локально, а затем выполнить локальный zgrep:
aws s3 cp s3: // bucket / contains / the / журналы. --recursive
Это скопирует ( cp
) все журналы в ваш текущий каталог (.
), а также включит все подпапки ( - recursive
).
Затем локальный zgrep
:
zgrep «поисковые слова» * .gz
Или также для рекурсивного поиска подкаталогов:
find -name \ *. Gz -print0 | xargs -0 zgrep "STRING"
(Взято с unix.stackexchange.com .)
У меня была такая же проблема. Я попытался написать скрипт на Python, чтобы загрузить файл и запустить его через zgrep. Но только на запуск одной команды grep ушло 30 секунд. Файлы также были около 200 МБ, поэтому общее время было очень большим. И мне пришлось сделать это для сотен файлов.
В моем случае я написал лямбда-функцию и запускал ее параллельно для разных файлов.gz. Используйте хранилище /tmp для загрузки файла.gz для экземпляра лямбда и запустите zgrep.
os.chdir('/tmp/')
os.mkdir('s3_logs')
os.chdir('s3_logs')
s3.download_file(Bucket, s3object, '/tmp/s3_logs/file.gz')
query = 'zgrep String file.gz'
result = os.popen(query).read()
print(result)
Несколько экземпляров лямбда могут сделать его как минимум в несколько раз быстрее. Хотя помните, что хранилище tmp для лямбды имеет всего 500 МБ.