多行awk正则表达式

Woe*_*itg 2 awk regular-expression

考虑一下text.txt这个内容:

blablabla    
&&&key word&&&
I want all 
these text and numbers 123
and chars !"£$%&
as output
&&&key word&&&
blablabla
Run Code Online (Sandbox Code Playgroud)

我想实现一个正则表达式,用awk它获得以下输出:

I want all 
these text and numbers 123
and chars !"£$%&
as output
Run Code Online (Sandbox Code Playgroud)

我正在使用这个表达式:

awk "$1 ~ /^[&&&key word&&&].[&&&key word&&&]/" test.txt
Run Code Online (Sandbox Code Playgroud)

但结果不是我所期望的:

&&&key word&&&
&&&key word&&&
Run Code Online (Sandbox Code Playgroud)

我道歉,因为这可能不是一个好问题。我已经从这里和 stackoverflow 尝试了很多解决方案,我阅读了一些教程,但仍然无法解决。如果你也能给我一个关于这个主题的完整教程,我将不胜感激。

编辑:按照建议使用 $0,我得到了更好的结果:

awk "$0 ~ /[&&&key word&&&]/,/[&&&key word&&&]/" test.txt
Run Code Online (Sandbox Code Playgroud)

结果是:

&&&key word&&&
I want all 
these text and numbers 123
and chars !"£$%&
as result
&&&key word&&&
Run Code Online (Sandbox Code Playgroud)

我仍然需要删除第一行和最后一行,我知道条件是否符合awk "{if (NR!=1&&NR!=-1) {print}}" text.txt但我不知道如何将其应用于上述输出

cas*_*cas 6

awk 'BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }' file
Run Code Online (Sandbox Code Playgroud)

这仅打印 的两个匹配实例之间的行&&&key word&&&。该变量p用作决定是否打印的标志......它开始为假(不打印)并且每次&&&key word&&&在输入行上匹配时逻辑否定(反转)。

如果有多个输入行块,&&&key word&&&则将打印所有这些块(但没有其他块)。如果有开头&&&key word&&&但没有结尾与之匹配,则将打印文件末尾的所有后续行。

输出:

I want all 
these text and numbers 123
and chars !"£$%&
as output
Run Code Online (Sandbox Code Playgroud)

如果开始和结束关键字不同(例如“START”和“STOP”),您可能更想做这样的事情:

awk 'BEGIN {p=0};
     /START/ { p = 1 ; next };
     /STOP/ { p = 0 ; next};
     p { print }' file
Run Code Online (Sandbox Code Playgroud)