Есть ли более короткий эквивалент long/path/**/^*.(complex|pattern)~длинный/путь/(bad-1|bad-2)/*(.), который не требует повторения long/path/?

Один из способов - использовать ifconfig с - s (короткий список) и вырежьте нужную часть:

$ ifconfig -a -s
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0  1374267176      0 116420 0      2848281091      0      0      0 BMRU
lo        65536 0  761767047      0      0 0      761767047      0      0      0 LRU
vboxnet0   1500 0         0      0      0 0             0      0      0      0 BM
virbr0     1500 0         0      0      0 0             0      0      0      0 BMU
$ ifconfig -s -a | awk '$1 !~ /Iface/ {print $1}'
eth0
lo
vboxnet0
virbr0

Или аналогичным способом с ip :

$ ip -o link show | awk -F': ' '{print $2}'
lo
eth0
virbr0
vboxnet0
3
18.08.2018, 19:25
1 ответ

Документы для (...)перечисляют /как исключение:

Note that grouping cannot extend over multiple directories: it is an error to have a `/' within a group (this only applies for patterns used in filename generation). There is one exception: a group of the form (pat/)# appearing as a complete path segment can match a sequence of directories.

В противном случае повторения можно избежать, используя выражение для фильтрации результатов:

% print -l a/**/*(.)
a/b/c/foo/file
a/b/d/foo/file
a/bad/e/foo/file
a/nope/d/foo/file
% print -l a/**/*(.e:'[[ $REPLY != *(bad|nope)* ]]':)
a/b/c/foo/file
a/b/d/foo/file
0
27.01.2020, 21:21

Теги

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