Есть ли карта имен пакетов в различных системах управления пакетами? [дубликат]

С zsh:

set -o extendedglob # best in ~/.zshrc
ls -ld -- *green*~^*red*

Оператор ~ glob предназначен для except (and not). ^ - для not. Значит, комбинация и не, поэтому и. То есть, это соответствует файлам с зеленым в их именах, кроме тех, которые не содержат красный.

Альтернатива с использованием оператора отрицания ^ (также требует extendedglob):

ls -ld -- ^(^*green*|^*red*)

все, кроме файлов, которые либо не содержат зеленый, либо не содержат красный.

Чтобы включить также скрытые файлы, добавьте квалификатор (D) glob.

Вы также можете использовать квалификаторы glob для сопоставления имен файлов с regexps, а с помощью setopt rematchpcre вы можете сделать эти regexps PCRE, где вы можете использовать операторы look ahead для достижения and:

re() {
  setopt localoptions rematchpcre
  [[ $REPLY =~ $1 ]]
}
ls -ld -- *(e:'re "^(?=.*green).*red"':)

Or:

re() {
  setopt localoptions rematchpcre
  [[ $REPLY =~ $RE ]]
}
RE='^(?=.*green).*red'; ls -ld -- *(+re)

С помощью ksh или bash -O extglob или zsh -o kshglob

ls -ld -- !(!(*green*)|!(*red*))

! (pattern) является ksh эквивалентом zsh оператора ^pattern расширенного glob.

Вы также можете сделать:

ls -ld -- @(*green*red*|*red*green*)

Но это не обобщается на любой шаблон. Например, для файлов, содержащих abc и bcd, вам понадобится @(*abc*bcd*|*abcd*|*bcd*abc*), для файлов, соответствующих ? ?? и *x*, @(x??|?x?|??x)...

С кш93

кш93 имеет некоторые и globbing операторы:

ls -ld -- @(*green*&*red*)

Или используя его дополненные regexps (введенные с ~(A:.... ) оператором glob):

ls -ld -- ~(A:.*green.*&.*red.*)

Вы также можете использовать perl-подобные операторы look ahead в ksh93:

ls -ld -- ~(P:(?=.*green).*red.*)
2
31.12.2013, 06:56
0 ответов

Теги

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