Chris Chris - 4 years ago 159
Bash Question

BASH: Get text before string

how to get text before a delimeter string in Bash? Like:

str="Hello World! It's a nice Day!"
i need to get everything before
nice
.
echo $str
should show me
Hello World! It's a

Thank you

Answer Source

You can use the % or %% operator:

$ str="Hello World! It's a nice Day!" ; echo "<${str%%nice *}>"
<Hello World! It's a>

This will remove the longest suffix.

See the bash reference manual:

${parameter%word}
${parameter%%word}

The word is expanded to produce a pattern just as in filename expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the value of parameter with the shortest matching pattern (the ‘%’ case) or the longest matching pattern (the ‘%%’ case) deleted. If parameter is ‘@’ or ‘*’, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with ‘@’ or ‘*’, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download