Regular Expression question


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Regular Expression question
# 1  
Old 05-14-2008
Power Regular Expression question

Folks;
I have 3 questions & any help with them would be really appreciated:

If i have a list of directories, for example:

/fs/pas/2007/4/6/2634210/admdat/examin
/fs/pas/2007/4/6/2634210/admdat2/stat
/fs/pas/2007/4/6/2634210/admdat3/data
/fs/pas/2007/4/6/2634210/im_2/0b.dcm

Now; my questions are:
1. How to use RE to extract the last file such as "examin and stat,..."?

2. How to use RE to extract the parent directory for the last file. such as "amdat, amdat2, im_2,..."?

3. How to use RE to extract the date in the middle "2007/4/6"?
# 2  
Old 05-14-2008
Are we talking Perl or grep or something else here? There are many different regex flavors and the matching strategy would also depend on what infrastructure is available in the tool.

For Perl, something like m%/(\d{4}/\d{1,2}/\d{1,2})/\d+/([^/]+)/([^/]+)$% would get the substrings you request into $3, $2, and $1, respectively.

Last edited by era; 05-14-2008 at 03:58 PM.. Reason: Add m%...% wrapper
# 3  
Old 05-14-2008
Not perl, just normal grep
# 4  
Old 05-14-2008
grep normally returns the entire matching line anyway.

The regular expression should work with grep as such, if you make a few minor substitutions. \d is a Perlism, replace with [0-9]. {4} is an egrep-ism, although POSIX grep has it in some form, too (maybe with backslashes before the braces); or you can simply put the required number of repetitions.

You will be hard pressed to find a situation where you can get exactly only the required parts out of grep, though. [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9] and [^/]*$ will still work, but the penultimate directory I don't think you can get without passing through sed or some such.
# 5  
Old 05-14-2008
I did this below to get the last directory in the tree & all i need is a similar ones:

.*/([^/\n\r]*?)$
# 6  
Old 05-14-2008
If including the last directory component as well is acceptable then you can do [^/]*/[^/]*$ to get the last and the penultimate directory (#1 and half #2) and then if you trim #1 and the last slash, you get the real answer for #2.

*? is certainly not a plain old grep regular expression.

What's the point of this exercise?
# 7  
Old 05-14-2008
I tried your method & it didn't work
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Regular expression question

Hi guys, I need a help with a query. Basically i want to know the difference between (0+01)* and ((0+01)*)* . It seems whatever string can be generated by the first RE can also be generated by second and they should essentially be same. Am i missing something? (1 Reply)
Discussion started by: srkmish
1 Replies

2. UNIX for Dummies Questions & Answers

Regular Expression Question

Hello, I'm trying to rename a bunch of files that were named incorrectly. I know a little about regular expressions but I'm not very good at them. Here is the image of the file names: http://i47.tinypic.com/np2gxi.jpg I'm trying to change the 20111116 at the beginning to 20101116 for all... (2 Replies)
Discussion started by: nastyn8
2 Replies

3. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

4. UNIX for Dummies Questions & Answers

a question about a regular expression

I like to loop a list of files which named file1, file2, file3, file4, etc if I like to loop them all over for f in file1, file2, file3, file4 do echo "processing" $f done how to use a regular expression to loop file$i instead? Thank you. (4 Replies)
Discussion started by: ksgreen
4 Replies

5. Shell Programming and Scripting

Easy Perl regular expression question

Hey all! what matching expression might I use to match all characters included in \W, EXCEPT < and > ? for example: @tokens=split(/ ???? /,$string); I've dubiously tried \W but this clips off the first letter of each "token", for some reason ... (2 Replies)
Discussion started by: applefat
2 Replies

6. UNIX for Dummies Questions & Answers

Question on Regular Expression

Folks; Could some one tell me what these 2 regular expressions mean: */(*)/* (\d\d\d\d/\d\d/\d\d/*?) (14 Replies)
Discussion started by: Katkota
14 Replies

7. UNIX for Dummies Questions & Answers

question (regular expression related)

anyone knows what does this regular expression match for? \(3,\).*\1.*\1 (1 Reply)
Discussion started by: metalwarrior
1 Replies

8. Shell Programming and Scripting

Regular expression question

hi i need to wipe out something from giving path i have some thing like that : pwd | sed 's/.*foo//' it is working fine when I have path like : /blah/balh1/foo/moo so it erasing me all that comes before the foo including the foo but I have problem when I have dir by the name of... (7 Replies)
Discussion started by: umen
7 Replies

9. UNIX for Dummies Questions & Answers

Regular Expression Question

Hi - I am trying to ignore the following items from a list. lp0 lp11 lp12 lp14 The following code works fine, but I was wondering if there was a tidier way to write the lp regular expression? egrep -v "lp" Thanks in advance. (3 Replies)
Discussion started by: Krispy
3 Replies

10. Shell Programming and Scripting

question about regular expression

why does * highlight everything in it... shouldn't it only highlight capital letters? (0 Replies)
Discussion started by: brentdeback
0 Replies
Login or Register to Ask a Question