Найти все строки, которые следуют шаблону и начинаются с символа

Причина ошибки в том, что вы, говоря

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
2
27.05.2017, 14:50
4 ответа

Рекомендуемый инструмент для обработки текста: 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
2
27.01.2020, 21:58
sed -e '/^categories:/,/^[^-]/!d;//d' yourfile
1
27.01.2020, 21:58

Если вы можете использоватьpcregrep(Perl -совместимые регулярные выражения):

pcregrep -M 'categories.*(\n-.*)*' file

или используя опережающее утверждение:

pcregrep -M 'categories(.|\n)*(?=layout)' file
1
27.01.2020, 21:58

Вот способ сделать это с помощью awk. Когда вы найдете строку заголовка, распечатайте ее и продолжайте получать следующую строку и печатать ее, если следующая строка начинается с -.

awk '$0=="categories:" { do { print; getline } while (/^-/) }'
0
27.01.2020, 21:58

Теги

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