Faça isso em duas etapas: primeiro remova o prefixo (caso o terminador esteja presente no prefixo) e remova tudo após o prefixo. Use o comando T
para pular uma linha se ela não corresponder:
echo "This is a test some stuff I want string junk string end" |
sed -n 's/.*\(.te.*ng\)//; T; s/\(ng\).*//p'
Como alternativa, exclua as linhas não correspondentes primeiro e, em seguida, execute a substituição como quiser.
echo "This is a test some stuff I want string junk string end" |
sed '/.*\(.te.*ng\)/!d; s/.*\(.te.*ng\)//; s/\(ng\).*//'
Como alternativa, execute as substituições e a impressão final apenas nas linhas correspondentes.
echo "This is a test some stuff I want string junk string end" |
sed '/.*\(.te.*ng\)/ { s/.*\(.te.*ng\)//; s/\(ng\).*//p; }'