tags:

views:

19

answers:

1

I'm trying to find some compressed log files, and do some operations on them. I can't use ls because they are thousands of files in the directory and BASH throws a 'argument list too long' error. This has brought me to find, but I'm having trouble with my regex.

Here is the whole find command

find $i -regex '.*logfile_MP[0-9]-GW0[0-9]_2010-09-\(\([7-9]\)|\(1[0-9]\)|\(2[0-3]\)\)-.*' -exec ls {} \;

I actually need to go through several log directories, so $i comes from a BASH loop to go through all the directories. Right now, I'm just trying to list the files, so I know I have the right ones; I'll amend my -exec statement once I get it working.

The problem relates to the parentheses section:

\(\([7-9]\)|\(1[0-9]\)|\(2[0-3]\)\)

I'm trying to match a range of days (7-23). From what I understand about Emacs-regex mode, I have to escape all parentheses. The rest of the regex is working because if I replace the parentheses section with just a number (ex. 7), it works fine.

Can anyone help me create a regex sub-expression to match 7-23?

Thanks.

+1  A: 

I think you're on the right track, just missing a \ in front of each of the |:

\([7-9]\|1[0-9]\|2[0-3]\)
Trey Jackson
Thanks Trey. It worked perfectly. That's the ugliest regex I've every used. Stupid escapes...
fandingo