我有一组文件夹:
$ ls -d _clip*
_clip10.trim _clip12.trim _clip14.trim _clip16.trim _clip2.trim _clip4.trim _clip6.trim _clip8.trim
_clip11.trim _clip13.trim _clip15.trim _clip1.trim _clip3.trim _clip5.trim _clip7.trim _clip9.trim
我需要选择两批文件夹,一个从_clip1.trim
到_clip6.trim
:
$ ls -d _clip[1-6].trim
_clip1.trim _clip2.trim _clip3.trim _clip4.trim _clip5.trim _clip6.trim
其他从_clip7.trim
到_clip16.trim
,但当我尝试使用ls -d _clip[7-16].trim
时,只会列出_clip6.trim
列表。
我需要了解如何在常规表达式中使用数字interbals。谢谢你的时间!
答案 0 :(得分:6)
[...]
是一个字符类。当你说[7-16]
时,这意味着“从7到1的字符(无),以及字符6”。我会说使用两个表达式:_clip[7-9].trim _clip1[0-6].trim
。看起来你没有在这个范围内拥有所有这些,但如果你这样做,你可以使用_clip{7..16}.trim
。
此外,在命令行中,它们是全局,而不是正则表达式。存在一些差异 - *
表示任何或不存在,不是前面任何内容的0+,与?
相同(零或一个任何东西,而不是前一个表达式)。
答案 1 :(得分:0)
如何使用参数生成器
$ echo _clip{1..6}.trim
_clip1.trim _clip2.trim _clip3.trim _clip4.trim _clip5.trim _clip6.trim
$ echo _clip{7..16}.trim
_clip7.trim _clip8.trim _clip9.trim _clip10.trim _clip11.trim _clip12.trim _clip13.trim _clip14.trim _clip15.trim _clip16.trim
这些不是正则表达式... bash可以生成参数:
$ echo x{0..1}_{FOO,BAR}_{x,y}
x0_FOO_x x0_FOO_y x0_BAR_x x0_BAR_y x1_FOO_x x1_FOO_y x1_BAR_x x1_BAR_y