使用sed删除多个模式

使用sed删除多个模式,sed,Sed,我有以下格式的数据 SQL> BEGIN Oracle Query; END; SQL> 123 : TEST ABC 345 : Yes ----------------- 123 : TEST BDE 345 : Yes ----------------- PL/SQL

我有以下格式的数据

SQL> BEGIN Oracle Query; END;
SQL> 123                              : TEST ABC
345                           : Yes
-----------------
123                           : TEST BDE
345                           : Yes
-----------------
PL/SQL procedure successfully completed.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 
我想将数据转换为以下格式:--

我可以在多个sed命令中删除记录,比如在我使用
sed'/123/,$之前删除所有内容!d'oracle.txt
然后删除所有SQL>term,然后从PL/SQL中删除行

不管怎样,是否可以在单个语句中执行此操作,我也不想在sed中硬编码123,但是SQL>as 123可能会更改为任何其他值

基本上,如果我可以在一个命令中仅在SQL>和PL/SQL之间获取数据,这就足够了


关于。

对于您的示例,此一行程序为您提供所需的输出:

sed 's/^SQL> //;/^[0-9]/!d' file
更新
嗨,肯特。。。这里的依赖关系同样取决于数字,如果第一行是axs而不是123,它将不起作用。。这很有效。。我只是对类似的路线有更多的怀疑,但有点不同。假设我有{ABC:123,BCD:234},{EFG:456,GHI:789}之间的数据。。是否可以使用相同的逻辑执行此操作?@user2854333您可以执行测试。还要尝试理解代码,并根据您的新需求对其进行扩展。如果你不能解决它,也可以将其作为新问题发布。
sed 's/^SQL> //;/^[0-9]/!d' file
tac file|awk '/^PL\/SQL/,/^SQL> /{sub(/^SQL> /,"");if(!/PL\/SQL/ && !/^-*$/) print}'|tac