Search code examples
bashawksedtrim

Trim a string (tailing end) based on a specific character in Bash


I was looking to try and figure out how trim a string in Bash, from the trailing end, once I hit a certain character.

Example: if my string is this (or any link): https://www.cnpp.usda.gov/Innovations/DataSource/MyFoodapediaData.zip

(I'll set that as my variable). (I.e. if I echo $var it will return that link:)

I'm looking to use Bash, I'm guessing I will need to utilize sed or awk, but I want to trim, starting from the end until I see the first / (since the will be the file name) and strip that out.

So using that link, I'm trying to just get after the / so jus "MyFoodapediaData.zip" and set that to a different variable.

So in the end, if I echo $var2 (if I call it that) it will just return: MyFoodapediaData.zip"

I tried working with sed 's.*/" and that will start from the beginning until it finds the first slash. I was looking for the reverse order if possible.


Solution

  • You can use bash builtin parameter substitution for this:

    $ var='https://www.cnpp.usda.gov/Innovations/DataSource/MyFoodapediaData.zip'
    $ echo "$var"
    https://www.cnpp.usda.gov/Innovations/DataSource/MyFoodapediaData.zip
    $ var2=${var##*/}
    $ echo "$var2"
    MyFoodapediaData.zip
    

    ${var##*/} means "from the beginning of the value of the var variable, remove everything up to the last slash."

    See parameter substitution in the manual