Как выполнить grep внутри определенного файла в tar.gz без извлечения?

Если я правильно понял ваше намерение,

/  name of section/ { c=FNR;}
(FNR-c>=2 && c>0) {print $1} 

Если шаблон совпал, cустанавливается на номер текущей строки, затем, если FNRбольше или равно c+2, что является второй строкой после строки, в которой шаблон совпал, напечатайте первое поле. Без инициализации cравно нулю, поэтому мы хотим избежать печати второй строки всего файла и поэтому добавляем дополнительное условие && c>0.

6
17.04.2021, 07:39
2 ответа

Скажите tar, какой файл он должен обрабатывать внутри архива:

for f in /path/*.gz; do
  tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true' fileA.txt
done

(fileA.txtв конце команды tar).

17
28.04.2021, 22:52

Вы можете ограничить файлы, которые должны быть извлечены с помощью tar.

Если вы используете GNU tar, используйте опцию --to-stdout. Это проще, чем правильно передать команду в кавычках.

for TAR_ARCHIVE in /path/*.gz; do
  TAR_FILENAME="fileA.txt"
  tar -xzf "$TAR_ARCHIVE" --to-stdout "$TAR_FILENAME" | grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern
done
3
28.04.2021, 22:52

Теги

Похожие вопросы