使用正则表达式指定一系列文件

时间:2014-06-22 17:14:07

标签: regex

我有大量的文件(数十万)都具有相同的名称格式。 文件名格式为:     [前缀] [数]后缀] 其中所有文件的[prefix]和[suffix]相同,只是数字部分发生变化。数字部分类似于0004732 所以文件名是:     [前缀] 004732 [后缀]     [前缀] 004733 [后缀]     [前缀] 004734 [后缀]     等

我需要将大约100,000个文件(带有连续数字)的范围移动到另一个目录,我想知道是否可以使用正则表达式执行此操作。

3 个答案:

答案 0 :(得分:0)

您正在寻找character classes。使用正则表达式指定数字范围有点困难,因为它适用于文本,而不是数字,但可以这样做(对于文件1-100):

prefix[0-1][0-9][0-9]suffix
prefix[0-1]\d\dsuffix    #this also works in PERL regex

更复杂的数字变得棘手。对于0-211:

prefix([0-1][0-9][0-9]|20[0-9]|21[0-1])suffix

答案 1 :(得分:0)

如果您使用的是Windows,请安装Cygwin,然后执行以下操作。如果您使用的是Mac OS X或Linux,只需打开终端即可。您需要执行以下操作:

ls PREFIX* | sed 's/PREFIX\(0[0-9]\)SUFFIX/mv & tmp\/PREFIX\1SUFFIX/' | sh

这是做什么的?

  1. 列出以指定前缀
  2. 开头的所有文件
  3. 将此列表粘贴到sed,它使用正则表达式模式仅匹配指定范围内的文件
  4. 使用移动命令
  5. 创建新字符串
  6. 将移动命令字符串传递给shell(sh)并执行它
  7. 您可以通过查看以下内容调整正则表达式以匹配您的号码范围http://www.regular-expressions.info/numericranges.html

答案 2 :(得分:0)

据我所知,没有正则表达式(处理复杂的情况),但你可以轻松使用循环:

以下代码在linux中运行。我使用CygWin在Windows上运行simnilar代码,它也可以运行。也许在Windows中有类似的方法。

如果两个数字的数字相同,则为

示例:来自

  

[前缀] 000012345 [后缀]

  

[前缀] 000056789 [后缀]

for (( i=12345; i<56789; i++)); do mv "[prefix]0000$i[suffix]" /newDirectoryPath done

否则你可以使用多个(通常是两个或三个)命令;

示例:来自

  

[前缀] 000012345 [后缀]

  

[前缀] 003456789 [后缀]

for (( i=12345; i<99999; i++)); do mv "[prefix]0000$i[suffix]" /newDirectoryPath done
for (( i=100000; i<999999; i++)); do mv "[prefix]000$i[suffix]" /newDirectoryPath done
for (( i=1000000; i<3456789; i++)); do mv "[prefix]00$i[suffix]" /newDirectoryPath done