使用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