you can try this. Anything prior to "string2" will not be deleted.
awk 'BEGIN{f=0}
{
match($0,"string2")
if(RSTART){
print substr($0,1,RSTART-1)
f=1
next
}
match($0,"string3")
if(RSTART){
$0=substr($0,RSTART)
f=0
}
}
f==0{print}
' file
Output
$ cat file
string1 blah blah
text before string2 junk
gibberish
gibberis string3 text here
string4
$ ./shell.sh
string1 blah blah
text before
string3 text here
string4
source
share