Perl:如何从特定模式开始逐字阅读文本文件?

Zeb*_*cks 1 perl parsing

我正在尝试编写一个脚本,该脚本读取以空格分隔的文本文件并识别某种模式PATTERN.在识别之后PATTERN,脚本应该读取RANDOM_NUMBER从...开始的单词PATTERN.例如,假设PATTERNaRANDOM_NUMBER7.然后为这个文本文件:

1 2 3 4 5 6
a b c d e f 
g h i j k j
Run Code Online (Sandbox Code Playgroud)

我想得到:

a b c d e f
g
Run Code Online (Sandbox Code Playgroud)

作为输出.

到目前为止,我已经到了识别这些模式的地步,但我不知道如何处理它.阅读单词的最佳方式是什么?

顺便说一下,我一字一句地逐字逐句地看了Perl中的Read文本文件,这对我的目的来说有点过于模糊.此外,答案并没有就代码的作用提供太多解释.

Sob*_*que 5

好的,所以这里的诀窍是设置$/- 记录分隔符.如果我们设置它,' '我们可以一次迭代一个'单词'.

然后我们可以使用范围运算符来"检测"我们是否在我们的模式之间.

local $/ = ' ';

while ( <DATA> ) {
    if ( m/a/ ..  10 ) { print; }
}
Run Code Online (Sandbox Code Playgroud)

现在,这 a 打印到"字段10" - 这不是特别有用,因为"count"从文件的开头开始.(通过

因此,我们可能希望在看到的条件为真时"触发",并继续进行许多其他迭代:

#!/usr/bin/perl
use strict;
use warnings;

local $/ = ' ';

while (<DATA>) {
    if (m/a/) {
        print;
        for ( 2 .. 7 ) { print scalar <DATA>; } #2 because we already have "1"
        last; #assuming we only want to do this once. 
    }
}


__DATA__
1 2 3 4 5 6 
a b c d e f 
g h i j k j
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

a b c d e f 
g 
Run Code Online (Sandbox Code Playgroud)