In place of:
sed -n "/$FROMSTR/,/$TOSTR/p"
use:
sed -n "/$FROMSTR/,\${p; /$TOSTR/q}"
This prints from the first occurrence of $FROMSTR
to the last line $
except that it quits when it sees the first occurrence of $TOSTR
.
Aside: You should be sure that you trust the source of FROMSTR
and TOSTR
. If either variable contained sed-active characters, the result might not be what you want.
Example 1
As a simple example:
$ FROMSTR=2; TOSTR=4; seq 10 | sed -n "/$FROMSTR/,\${p; /$TOSTR/q}"
2
3
4
Example 2
As an exampled closer to your actual input, consider this test file:
$ cat file
1
CREATE MULTISET TABLE DBNAME.TABLENAME
2
3
); ------------------------
4
And run this command:
$ FROMSTR="CREATE MULTISET TABLE DBNAME.TABLENAME"
$ TOSTR="); ------------------------"
$ sed -n "/$FROMSTR/,\${p; /$TOSTR/q}" file
CREATE MULTISET TABLE DBNAME.TABLENAME
2
3
); ------------------------
Example 3
Consider this test file:
$ cat file
1
CREATE MULTISET TABLE DBNAME.TABLENAME
2
); ------------------------
); ------------------------
3
CREATE MULTISET TABLE DBNAME.TABLENAME
4
); ------------------------
5
We define our variables:
$ FROMSTR="CREATE MULTISET TABLE DBNAME.TABLENAME"
$ TOSTR="); ------------------------"
And, run our code:
$ sed -n "/$FROMSTR/,\${p; /$TOSTR/q}" file
CREATE MULTISET TABLE DBNAME.TABLENAME
2
); ------------------------