Я думаю, что вы просите просто:
tar tvf filename
Это создает список того, что находится в tar-файл, не открывая его. Вам придется запустить его после создания tar-архива, но он должен дать вам то, что вам нужно.
Вы можете просто связать это с задней частью вашей команды tar, выполнив следующие действия:
tar cMf multi-0001.tar --new-volume-script = volume-script.sh --tape -length = $ BLOCKSIZE $ DIR; tar tvf multi-0001.tar> multi-001 -isting.txt
-w, --word-regexp
Выберите только те строки, содержащие совпадения, которые образуют целые слова. [...] Символами, составляющими слово, являются буквы, цифры и знак подчеркивания.
Подчеркивание допустимо как часть идентификатора в большинстве языков программирования (по крайней мере, в C, Perl, shell), возможно, поэтому здесь оно рассматривается как «слово-символ».
Одним из способов сопоставления только слова может быть использование отрицательных проверок вперед и назад, которые обеспечивают регулярные выражения Perl. Здесь (? означает «не предшествующий символ нижнего регистра, а
(?![az])
аналогично тому, что следует после. Начало и конец строка не является символом нижнего регистра, поэтому это будет соответствовать proc
даже в начале:
pcregrep '(?<![a-z])proc(?![a-z])' filename
Или с помощью grep ERE, явно принимая во внимание начало и конец строки:
grep -E '(^|[^a-z])proc([^a-z]|$)' filename
( Я не уверен, какой из них красивее.)
Если у вас есть текст на естественном языке, [[:alpha:]]
может быть более правильным, чем [az]
.
Но, конечно, просто найти _proc_
проще, если вы знаете, что там будут символы подчеркивания.
Флаг -w
для grep
заставит данное выражение соответствовать только целым словам.
«Слово» — это строка «символов слова», окруженная «символами, не являющимися словами» (или начало/конец строки).
Проблема в вашем случае заключается в том, что _
(подчеркивание) является «символом слова» и, следовательно, не служит для разграничения слова proc
как слова на его своя.
Вместо использования -w
с grep
используйте шаблон, который явно разделяет слово _
:
grep '_proc_' filename
В качестве альтернативы используйте [ ^az]
вместо _
, если вы хотите разграничить слово чем-либо, кроме строчных букв алфавита:
grep '[^a-z]proc[^a-z]' filename
Обратите внимание, что это не распознает proc
. ] как слово в самом начале/конце строки.