I need to remove the part

man1/bmtoa.1.gz

from the full path

/usr/share/man/man1/bmtoa.1.gz

so that it results in

/usr/share/man/

I've tried ${path#[!/]*/*} and ${path#/*/*} but both result in wrong paths.

link|improve this question

71% accept rate
If you have received an acceptable answer, then please consider accepting it by clicking on the outline of a checkmark to the left of the answer. This will aid future users who have the same question. – Kevin M Apr 26 '10 at 18:26
feedback

2 Answers

this will work ${path%/*/*}, but works from the back to the front. here is a good how-to for chopping strings in bash.

link|improve this answer
feedback

If you could deal with /usr/share/man/man1, then you could do dirname /usr/share/man/man1/bmtoa.1.gz, but since you stated that you need the man1 to also come off, so you'll have to daisy-chain them:

dirname `dirname /usr/share/man1/bmtoa.1.gz`
link|improve this answer
It doesn't use shell expansion as requested by to me dirname looks much saner and simpler. – Jason Tan Apr 25 '10 at 15:18
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.