我需要提取A和(B或C)模式之间的文本,其中包含D模式。A和(B或C)之间的提取线,包含D
例如我有一个文件,需要提取“proc sql”和(“quit”或“run”)之间的所有内容,其中包含“index”。
proc sql bla-bla-bla index=10; quit proc sql bla-bla-bla quit; proc sql index=10; run
所需输出:
proc sql bla-bla-bla index=10; quit proc sql index=10; run
现在我有这样的解决方案:
perl -0777 -lne 'print for grep /\bindex\b/i, /^proc sql.*?quit.*?\n/mgs' file
但它只是 “PROC SQL” 和 “退出”(而不是 “退出” 之间或提取“运行”),包含“索引”。我不知道如何添加OR操作。
如果你可以提出替代的awk/sed/grep解决方案 - 会很好。
对不起,改正了。 – kyarovoy