вы можете попробовать это. Все, что находится до "string2", не будет удалено.
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
выход
$ 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