Visit Our UNIX and Linux User Community


fnsplit, Extract filename from path


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting fnsplit, Extract filename from path
# 1  
Old 08-22-2009
fnsplit, Extract filename from path

Hi all,

I know this has been covered a lot, I have been searching and reading for hours on the subject, however so far I have been unsuccessful at accomplishing the goal using sed.

I know this can be done with parameter expansion (Thanks cfajohnson for a great explanation of parameter expansion).
Code:
# getfn
str='./filename.ext'
fn=${str##*/}

However the goal is sed'ucation!

I am here...
Code:
# getfn
str='./filename.ext'
fn=$(echo ${str} | sed 's,/.*/,,')

Then I combine that with
Code:
# stripext
str='./filename.ext'
fn=$(echo ${str} | sed 's,\(.*\)\..*,\1,')

Like
Code:
# getpurefn
 str='./filename.ext'
fn=$(echo ${str} | sed 's,/.*/,,;s,\(.*\)\..*,\1,')

For the ultimate goal of the pure 'filename'...

All works good except when the path begins with './'..

What would be the resolution??

I'm not getting a good understanding of RE's yet so an explanation of how the expression works would be awesome as well! (This is my first attempt at RE's)

Thanks all.

-Enjoy
fh : )_~
# 2  
Old 08-22-2009
Hi.

Code:
sed "s,.*/\(.*\),\1,"

Or without the extention:
Code:
sed "s,.*/\(.*\)\..*,\1,"

If you want the "pure" filename, what's wrong with basename?

Code:
basename ./test
 
test

Or did I miss something?
# 3  
Old 08-22-2009
Code:
str='./filename.file.ext'
# echo $str | sed "s,.*/\(.*\)\..*$,\1,"
filename.file

# 4  
Old 08-22-2009
Quote:
Originally Posted by scottn
Code:
sed "s,.*/\(.*\),\1,"

Or without the extention:
Code:
sed "s,.*/\(.*\)\..*,\1,"

If you want the "pure" filename, what's wrong with basename?
scottn, Thank you, Obliviously I don't need to say "It works"!, About basename, yup, you did miss something... the sed'ucation part!
This really is just for education with sed and RE's.

Quote:
Originally Posted by danmero
Code:
str='./filename.file.ext'
# echo $str | sed "s,.*/\(.*\)\..*$,\1,"
filename.file

danmero, Thank you, Again, you know I don't need to say "It works"!

To both!
I thank you, not only for this answer but the others I have gleaned from this site that may very well have been yours!

Anyways, A couple things stand out to me...
1. scottn's method has no '$' ... If I remember correctly the '$' means EOL.
2. Both use double quotes (") versus single (')

Super clean method ... I was way off! Smilie

Does anyone know of a workbook or something that has sed and RE projects to work through??

-Enjoy
fh : )_~
# 5  
Old 08-22-2009
Hi!

The $ isn't neccessary (regular expressions are greedy and "dot rest of line" (\..*) is the same as "dot rest of line to the end of the line"! (\..*$)) because it will match the longest expression it can from the first dot it finds (hence the greedy bit).

Single, double, doesn't matter unless there's something you want the shell to expand somewhere - in which case you'd use double quotes.

Google.... there's lots of stuff out there. (or look around on this site. my RE's are anything but great, but if there's an answer to be had, you could probably find it here)

Last edited by Scott; 08-22-2009 at 06:56 PM.. Reason: removed some garb (conservatively!!)
# 6  
Old 08-22-2009
Quote:
Originally Posted by scottn
The $ isn't neccessary (regular expressions are greedy and "dot rest of line" (\..*) is the same as "dot rest of line to the end of the line"!
Understood ... Makes sense, Thank you!

Quote:
Originally Posted by scottn
Single, double, doesn't matter unless there's something you want the shell to expand somewhere - in which case you'd use double quotes.
Yup, I understood this, wanted to ensure there was no other reason...
I typically use double quotes unless I know it needs single anyways.
If I'm fighting something and there is no parameters to expand I'll use singles.

Quote:
Originally Posted by scottn
Google.... there's lots of stuff out there.
I don't Google, too much garbage! ... I use altavista... Smilie

Quote:
Originally Posted by scottn
(or look around on this site. my RE's are anything but great, but if there's an answer to be had, you could probably find it here)
Thats the reason I almost always include something along the lines of:
"Thank you all for the answers to my unasked questions!"

And I very much mean that to everyone!

Finding it can get tough if you don't know exactly what you are looking for!

I have found a slight issue with the RE...
Code:
sh scriptname.sh

LOGFILE=$(echo ${0} | sed 's,.*/\(.*\)\..*$,\1,').log
echo $LOGFILE

scriptname.sh.log

oooPs, Found out the hard way... Smilie
Had to manually rename things! Smilie

Thanks

-Enjoy
fh : )_~

Previous Thread | Next Thread
Test Your Knowledge in Computers #737
Difficulty: Medium
In 1979, the TRS-80 had the largest selection of software in the microcomputer market.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sorting using filename of a path

Hi all! i have a question how do you sort the filename of a path directory according to alphabetic order. Example: sort according to highlighted text. There maybe space for filename Path=/home/pikamon/Desktop/ABC; Path=/home/pikamon/Desktop/ABD; Path=/home/pikamon/Desktop/Riduan la;... (5 Replies)
Discussion started by: pikamon
5 Replies

2. Programming

to extract all the part of the filename before a particular word in the filename

Hi All, Thanks in Advance I am working on a shell script. I need some assistance. My code: if then set "subscriber" "promplan" "mapping" "dedicatedaccount" "faflistSub" "faflistAcc" "accumulator"\ "pam_account"; for i in 1 2 3 4 5 6 7 8;... (0 Replies)
Discussion started by: aealexanderraj
0 Replies

3. UNIX for Dummies Questions & Answers

to extract all the part of the filename before a particular word in the filename

Hi All, Thanks in Advance I am working on a shell script. I need some assistance. My Requirement: 1) There are some set of files in a directory like given below OTP_UFSC_20120530000000_acc.csv OTP_UFSC_20120530000000_faf.csv OTP_UFSC_20120530000000_prom.csv... (0 Replies)
Discussion started by: aealexanderraj
0 Replies

4. Shell Programming and Scripting

How to remove filename from the path

Hi, I have a list of paths with files at the end. How can strip off filenames. This is what I have: /apps/test/abc/file.txt /apps/new/home/daily/report.xml /apps/old/home/weekly/out/test.sh This is what I need: /apps/test/abc/ /apps/new/home/daily/ /apps/old/home/weekly/out/ ... (10 Replies)
Discussion started by: djanu
10 Replies

5. Shell Programming and Scripting

Split Filename from Absolute Path

Hello, I have the string "/a/b/c/ddd.txt" and i want to get only the filename, in this case "ddd.txt". I have as something known in the script the pattern "/a/b/c/", so I`ve tried something like: echo "/a/b/c/ddd.txt" | cut -d "/a/b/c/" -f2 but it doesn`t go, any help?. thanks, bye (2 Replies)
Discussion started by: rubber08
2 Replies

6. Shell Programming and Scripting

Getting filename with entire path without extension

Hi Experts, need one help.. m writing a shell script for which i need the entire path of the file but without its extension. running the below script gives error at the statement DIR = `dirname $FILE` --command not found. #!/bin/bash jar xvf *jar for FILE in `find . -name "*.class"` ... (3 Replies)
Discussion started by: amicableperson
3 Replies

7. Shell Programming and Scripting

one liner to extract path from PATH variable

Hi, Could anyone help me in writing a single line code by either using (sed, awk, perl or whatever) to extract a specific path from the PATH environment variable? for eg: suppose the PATH is being set as follows PATH=/usr/bin/:/usr/local/bin:/bin:/usr/sbin:/usr/bin/java:/usr/bin/perl3.4 ... (2 Replies)
Discussion started by: royalibrahim
2 Replies

8. Shell Programming and Scripting

to check whether a directory or filename path is valid or not

the script on excution should take a directory path from useran a numric input and it should check indicate whether its write or not? if the cmmd sh<script-name>,dir/path.<500>" is greater than 500 in size should be copied to dir ,temp in pwd and display the mesage'files of 2000 bytes hav been... (4 Replies)
Discussion started by: arukr
4 Replies

9. Windows & DOS: Issues & Discussions

get filename from absolute path in batch program

hey im writing batch program for the first time and i have almost finished it the only problem is that i want to extract basename from absolute path for eg : if my first argument is c:\abcd\xyz\temp.txt then i want only temp.txt in variable. and how do i extract some part from string for eg... (1 Reply)
Discussion started by: zedex
1 Replies

10. UNIX for Dummies Questions & Answers

Remove path from filename

In a foreach loop I end up with $file containing the filename INCLUDING the whole path. I want this reduced to just the filename, but I can't seem to remember how I did it some years back. I am sure I can do it with "sed", but I am pretty sure I have seen a simpler command. Anyone? borgeh (3 Replies)
Discussion started by: borgeh
3 Replies

Featured Tech Videos