cut file extension

Joachim Schrod jschrod at
Wed Feb 20 16:04:52 UTC 2008

Owen Townend wrote:
>      >>>   Look into `sed`. Something like this should do it
>      >>>   `sed -e 's/.*$//'`
>      >>>
>      >>>   That's from the top of my head though, check it first!
>      >> man basename may be useful :-)
>      >>
>      >> and the Owen's sed command isn't quite right, use 's/\..*$//'.
>      >
>      > ahah, that's closer to what I was aiming for, but it still doesn't
>      > account for files like '' cutting them to 'file' though  it should only
>     match the end
>      > of the line... ?
> I was thinking there must be a way to do this quickly in sed, 
> but I can't seem to find the right regex to match it correctly.
> ah well, a solution in search of a problem now with it fixed.

This is for the case that somebody needs this for arbitrary Unix 
systems, where bash might not be available. I.e., plain old sh 
programming... :-)

It would still not work, you need to supply the file name on stdin.
basename=`echo "$fname" | sed 's/\.[^.]*$//'` would do the trick.

Of course, one could also use
basename=`expr "$fname" : '.*\.\([^.]*\)$'`
(Please note the quote to support filename with spaces.)

And one should mention that basename, which was named as a 
solution, allows only to strip known suffixes, not arbitrary ones.


Joachim Schrod				Email: jschrod at
Roedermark, Germany

More information about the ubuntu-users mailing list