Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bash string manipulation cheatsheet.

Bash string manipulation cheatsheet

Assignment
Assign value to variable if variable is not already set. Value will be returned.

Couple with : no-op if return value is to be discarded.
${variable="value"}
: ${variable="value"}
Removal
Delete shortest match of needle from front of haystack ${haystack#needle}
Delete longest match of needle from front of haystack ${haystack##needle}
Delete shortest match of needle from back of haystack ${haystack%needle}
Delete longest match of needle from back of haystack ${haystack%%needle}
Replacement
Replace first match of needle with replacement from haystack ${haystack/needle/replacement}
Replace all matches of needle with replacement from haystack ${haystack//needle/replacement}
If needle matches front of haystack replace with replacement ${haystack/#needle/replacement}
If needle matches back of haystack replace with replacement ${haystack/%needle/replacement}
Substitution
If variable not set, return value, else variable ${variable-value}
If variable not set or empty, return value, else variable ${variable:-value}
If variable set, return value, else null string ${variable+value}
If variable set and not empty, return value, else null string ${variable:+value}
Extraction
Extract length characters from variable starting at position ${variable:position:length}
String length of variable ${#variable}

Reference

@chb0github

This comment has been minimized.

Copy link

commented Feb 22, 2019

I'd like to propose a few additions

${variable##*.} -> returns everything after the last . in a string. Handy for getting file extensions

variable="/Users/cbongiorno/rds.json"
echo ${variable##*.}
json

Remove the last character from a string:

echo ${variable%%?}
/Users/cbongiorno/rds.jso

Remove the first character from a string:

echo ${variable##?}
Users/cbongiorno/rds.json
@magnetikonline

This comment has been minimized.

Copy link
Owner Author

commented Feb 22, 2019

Nice one @chb0github 👍

The last/first char drops can be extended by padding out the ? count too - works nicely.

@vsoch

This comment has been minimized.

Copy link

commented Apr 12, 2019

Maybe you can make this into a repo so others can PR with said additions?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.