Причина ошибки в том, что вы, говоря
tar -xf archive.tar path
просит извлечь path
из archive.tar
. Если path
не найдено в archive.tar
, вы получите ошибку Not found in archive
.
Вы должны были использовать параметр -C path
, который при извлечении устанавливает каталог назначения для файлов в архиве.
Полная командная строка в вашем случае:
tar -zxvf IUS17.05_g311_lnx86_GPLV3_N20170504.tar.gz -C /cad/local/apps/cadence/xcelium
Рекомендуемый инструмент для обработки текста: awk
.
Попробуйте так:
awk '/categories/,/layout/ { if (!/layout/) print }' your_file
Эта команда печатает все, начиная с категорий
до layout
без самой этой строки.
Вывод:
categories:
- tips
- programming
- howto
- another-tag
Если вы хотите иметь только элементы между категориями
и макетом
, вы можете просто добавить второй шаблон к условию if
, например это:
awk '/categories/,/layout/ { if (!/layout/ && !/categories/) print }' your_file
Тогда ваш вывод будет выглядеть так:
- tips
- programming
- howto
- another-tag
Если вы можете использоватьpcregrep
(Perl -совместимые регулярные выражения):
pcregrep -M 'categories.*(\n-.*)*' file
или используя опережающее утверждение:
pcregrep -M 'categories(.|\n)*(?=layout)' file
Вот способ сделать это с помощью awk. Когда вы найдете строку заголовка, распечатайте ее и продолжайте получать следующую строку и печатать ее, если следующая строка начинается с -
.
awk '$0=="categories:" { do { print; getline } while (/^-/) }'