Команда «grep -w» не работает

Я думаю, что вы просите просто: 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

2
21.11.2018, 23:03
2 ответа

-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_ проще, если вы знаете, что там будут символы подчеркивания.

4
27.01.2020, 21:49

Флаг -w для grep заставит данное выражение соответствовать только целым словам.

«Слово» — это строка «символов слова», окруженная «символами, не являющимися словами» (или начало/конец строки).

Проблема в вашем случае заключается в том, что _ (подчеркивание) является «символом слова» и, следовательно, не служит для разграничения слова proc как слова на его своя.

Вместо использования -w с grep используйте шаблон, который явно разделяет слово _:

grep '_proc_' filename

В качестве альтернативы используйте [ ^az] вместо _, если вы хотите разграничить слово чем-либо, кроме строчных букв алфавита:

grep '[^a-z]proc[^a-z]' filename

Обратите внимание, что это не распознает proc. ] как слово в самом начале/конце строки.

11
27.01.2020, 21:49

Теги

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