代替:
sed -n "/$FROMSTR/,/$TOSTR/p"
使用:
sed -n "/$FROMSTR/,\${p; /$TOSTR/q}"
这会从$FROMSTR 的第一次出现打印到最后一行$,除非它在看到$TOSTR 的第一次出现时退出。
除此之外:您应该确保您信任FROMSTR 和TOSTR 的来源。如果任一变量包含 sed-active 字符,则结果可能不是您想要的。
示例 1
举个简单的例子:
$ FROMSTR=2; TOSTR=4; seq 10 | sed -n "/$FROMSTR/,\${p; /$TOSTR/q}"
2
3
4
示例 2
作为更接近您的实际输入的示例,请考虑以下测试文件:
$ cat file
1
CREATE MULTISET TABLE DBNAME.TABLENAME
2
3
); ------------------------
4
然后运行这个命令:
$ FROMSTR="CREATE MULTISET TABLE DBNAME.TABLENAME"
$ TOSTR="); ------------------------"
$ sed -n "/$FROMSTR/,\${p; /$TOSTR/q}" file
CREATE MULTISET TABLE DBNAME.TABLENAME
2
3
); ------------------------
示例 3
考虑这个测试文件:
$ cat file
1
CREATE MULTISET TABLE DBNAME.TABLENAME
2
); ------------------------
); ------------------------
3
CREATE MULTISET TABLE DBNAME.TABLENAME
4
); ------------------------
5
我们定义我们的变量:
$ FROMSTR="CREATE MULTISET TABLE DBNAME.TABLENAME"
$ TOSTR="); ------------------------"
然后,运行我们的代码:
$ sed -n "/$FROMSTR/,\${p; /$TOSTR/q}" file
CREATE MULTISET TABLE DBNAME.TABLENAME
2
); ------------------------