LINUX.ORG.RU

Поиск файла в архиве | поиск «сложных» строк в файле.

 , , ,


1

1

Исходные данные

- link.txt - список ссылок на архивы различных форматов(zip, rar, tar, tar.gz), пример сторки https://www.url1.com/archive1.zip

- file.conf - имя файла, в котором ищем строки, содержащие ключи

- pattern.txt - список ключей, по которым ищем нужные строки, содержат спец.символы, пример «level('_TURBO_SKY_', 'Jungo');»

Нужно скачать архивы по списку, найти в них файл по имени, в этом файле найти строки, содержащие ключи, сохранить результат в файл и удалить архив. На данный момент получилось сделать только скачивание по списку и поиск в архиве по простым ключам, но собирает кучу мусора по 2-м причинам:

- поиск осуществляется во всем архиве, а не в конкретном файле

- ключи не точные, т.к. пришлось обрезать спецсимволы

=== #!/bin/bash while read LINK; do LINK=${LINK%$'\r'} curl -o file.zip $LINK && zipgrep -H -f pattern.txt file.zip >> out.txt && rm file.zip done < link.txt ===

Думаю, нужно распаковать архив, передать результат команде find, для поиска файла по имени, затем найти строки в файле используя grep.

=== unzip -d dir1 file.zip && find dir1 -name «file.conf» |\ while read i; do \ cat «$i» | grep -H -f pattern.txt >> out.txt && rm file.zip && rm -R dir1 done ===

Сложность в том, что архивы могут иметь разные форматы и ключи содержат спецсимволы. Прошу сильно не ругать) Буду благодарен за любую помощь)

Сложность в том, что архивы могут иметь разные форматы и ключи содержат спецсимволы.

В чем сложность конкретно? Если разные тулзы для компрессии/архивирования используются, значит пиши разные сценарии для грепа из архива или предварительной распаковки. Тип (сжатого) архива определяешь через file или по постфиксу.

По ключам, смотри регулярки grep или sed, какие символы экранируются и какие режимы есть. Можно дергать через питон/перл. И sed, и grep принимают в качестве паттерна переменные, если что.

anonymous ()