Rgeek
Rgeek

Reputation: 449

Remove prefix and extension in Shell from file

I want to extract filename by removing prefix and extension. e.g. file=foo_filename.txt

I am using this,but its not working.

${file#foo_%.txt}

Thanks

Upvotes: 0

Views: 377

Answers (2)

Jakub Kotowski
Jakub Kotowski

Reputation: 7571

You got it almost right:

file=foo_filename.txt ;  echo ${file%.txt}

Or for example in one step with sed:

file=foo_filename.txt ;  echo ${file} | sed 's/^foo_\(.*\)\..*/\1/'

Yet another method:

file=foo_filename.txt ; basename -s .txt ${file#foo_}

You cannot "nest" variable expansion in bash: Can ${var} parameter expansion expressions be nested in bash?

Upvotes: 1

that other guy
that other guy

Reputation: 123410

file="foo_filename.txt"
file=${file#foo_}
file=${file%.*}
echo "$file"

Upvotes: 2

Related Questions