类似于但不完全类似于如何在包括它们在内的两个模式之间选择第一次出现......给定这个输入文件:
something P1 something
content1
content2
something P1 something
content3
content4
我只需要这个输出:
something P1 something
content1
content2
类似于但不完全类似于如何在包括它们在内的两个模式之间选择第一次出现......给定这个输入文件:
something P1 something
content1
content2
something P1 something
content3
content4
我只需要这个输出:
something P1 something
content1
content2
一个 awk 解决方案:
这将打印第一行匹配
/^something P1 something$/
和所有行,直到下一行匹配该模式(但不包括所述行)或文件末尾。这就是我怀疑你真正想要的:
要打印第一个块:
或打印第二个:
等等。如果没有明确的要求说明,这只是一个猜测。
awk
awk 中
i
模式块的一般解决方案是:解释:
如果重要的模式只是 P1,那么使用:
为了更快的执行,当块结束时退出:
如果您想要文字匹配(不是模式),请使用:
sed
要从一个模式的第一个实例到模式的下一个实例,您可以在 GNU sed 中执行以下操作:
第一个之前可能有一些行
something P1 something
。当找到第二个模式时,脚本停止(快速)。
由于两种模式(开始和结束)是相等的,我们可以将命令简化为:
为了使其更便携,请使用:
结果:
使用带有非 Posix 构造 Q 的 Gnu sed 编辑器:
使用 Posix only 构造,我们这样做:
使用 Perl:
完后还有: