bash 4.1.2(2): как применить обратное сопоставление регулярных выражений в цикле for?
Я хочу перебрать только те каталоги, которые НЕ содержат строку unicredit. Учитывая этот список каталогов (расположенный в/tmp/scripts/bash/test/
):
par_q
swx_i
swx_r
unicreditucispa_ams_b
unicreditucispa_ams_m
unicreditucispa_ber_b
Я запустил следующий однострочник:
for i in /tmp/scripts/bash/test/^((?!unicredit*).)*$; do echo FOUND $i; done
И ожидал следующего вывода:
FOUND par_q
FOUND swx_i
FOUND swx_r
Но вместо этого появилась такая ошибка:
-bash: syntax error near unexpected token `('
Я попытался избежать некоторых / всех круглых скобок с помощью \
а также пытался заключить регулярное выражение в кавычки, но это не решило проблему.
Какие изменения мне нужно сделать, чтобы получить желаемый результат?
Спасибо.
1 ответ
Решение
Я предлагаю:
shopt -s extglob # enable extglob
for i in /tmp/scripts/bash/test/!(*unicredit*); do echo "FOUND $i"; done