2

好的,所以我需要读入一个文件,遍历每一行并找到字符串 ERROR 的位置。这是我到目前为止所拥有的:

open(LOGFILE, "input.txt") or die "Can't find file";

$title = <LOGFILE>;

$\=' ' ;
while (<>){
    foreach $title(split){
        while (/^ERROR/gm){
            print "ERROR in line $.\n";
        }
    }
}
close LOGFILE;

所以我遇到的问题是它只查看每行的第一个单词。所以如果输入是

嘘远错误

它不会记录错误。任何帮助将不胜感激!我是 perl 新手,所以请尽量保持基本。谢谢!

4

2 回答 2

6

这是一种更优雅的方法,我修复了正则表达式问题。^匹配一行的开头。

open(LOGFILE, "input.txt") or die "Can't find file";

while(<LOGFILE>) {
   print "ERROR in line $.\n" if(/ERROR/);
}
close LOGFILE;

或者从命令行如何:

perl -n -e 'print "ERROR in line $.\n" if(/ERROR/);' input.txt

-n所有输入行的隐式循环 -e执行一行代码

要输出到文件:

perl -n -e 'print "ERROR in line $.\n" if(/ERROR/);' input.txt > output.txt

虽然这是使用 Perl 的一个很好/简单的示例,但如果您使用的是 Unix shell,则grep无需编写脚本即可执行您想要的操作(感谢 OP 注释中的 TLP):

grep -n ERROR input.txt > output.txt

这实际上是打印匹配行本身及其行号。

于 2012-06-06T15:05:12.790 回答
1

当然不会,因为正则表达式前面的 ^ 表示“行首”。删除它,它会在任何地方捕获错误。你也不应该做任何分裂技巧。您需要在任何地方找到错误吗?然后就这么写:

while (<>){
   if (/ERROR/){
      print "ERROR in line $.\n";
   }
}
于 2012-06-06T15:03:28.150 回答