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
-
1https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion – melpomene Feb 04 '17 at 14:35
1 Answers
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.

- 84,125
- 8
- 85
- 148

- 11,381
- 33
- 59