Как мне использовать grep для двух вещей, у которых есть опция -w?

Busybox найти заявки в поддержку Параметр -regex , который можно использовать для удаления файлов, которые действительно соответствуют шаблону:

find . -type f -regex '.*\.tmp\|.*\.core' -delete

К сожалению, исключение списка расширений без параметра -not невозможно в общем случае (технически есть решение , но оно не масштабируется). Это причина включения опции - not в первую очередь. Если вам нужно исключить произвольный список расширений, вам понадобится find , который поддерживает эту опцию, или find + grep + xargs :

find . | grep -v -e '\.jpg$' -e '\.txt$' | xargs rm

4
13.04.2017, 15:36
2 ответа

Граница слова имеет такой же эффект, как -w, но может использоваться как часть выражения.

'\b'
Сопоставляет пустую строку на краю слова.
[...]
'\<'
Искать пустую строку в начале слова.
'\>'
Искать пустую строку в конце слова.

Искать bar только когда это целое слово, а foo где угодно (включая внутри более длинных слов):

grep -E 'foo|\<bar\>'
14
27.01.2020, 20:46

Учитывая, что foo будет использоваться в том же контексте, что и foo, а также соответствовать полному слову, проще всего сделать так:

grep -E -w '(foo|bar)' file
0
27.01.2020, 20:46

Теги

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