如何在正则表达式中使用数字间隔?

时间:2013-07-19 17:05:12

标签: regex bash

我有一组文件夹:

$ 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。谢谢你的时间!

2 个答案:

答案 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