I have a lot of bash
scripts that use perl
expressions within grep
in order to extract a substring between two delimiters. Example:
echo BeginMiddleEnd | grep -oP '(?<=Begin).*(?=End)'
The problem is, when I ported these scripts to a platform running busybox
, 'integrated' grep
does not recognize -P switch. Is there a clean way to do this using grep
and regular expressions
?
Edit:
There is no perl
, sed
or awk
on that platform. It's a lightweight linux
.
Assuming there's no more than one occurrence per line, you can use
sed -nr 's/.*Begin(.*)End.*/\1/p'
With grep and non-greedy quantifier you could also print more than one per line.
Use bash
built-in parameter substitution:
# grab some string from grep output
f=BeginMiddleEnd
middleend=${f/Begin/} # do some substitution to lose "Begin"
echo $middleend
MiddleEnd
beginmiddle=${f%%End} # strip from right end to lose "End"
echo $beginmiddle
BeginMiddle
Loads more examples here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With