bash 4.1.2(2): 如何在for循环中应用正则表达式逆匹配?
bash 4.1.2(2): how to apply regex inverse matching in a for-loop?
我只想遍历不包含字符串 "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 `('
我试图用 \
转义 some/all 括号,也试图用引号将正则表达式括起来,但没有解决问题。
我应该做哪些修改才能获得我想要的输出?
谢谢。
我建议:
shopt -s extglob # enable extglob
for i in /tmp/scripts/bash/test/!(*unicredit*); do echo "FOUND $i"; done
我只想遍历不包含字符串 "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 `('
我试图用 \
转义 some/all 括号,也试图用引号将正则表达式括起来,但没有解决问题。
我应该做哪些修改才能获得我想要的输出?
谢谢。
我建议:
shopt -s extglob # enable extglob
for i in /tmp/scripts/bash/test/!(*unicredit*); do echo "FOUND $i"; done