在Perl上搜索文件

时间:2012-06-06 15:01:33

标签: perl search

好的,所以我需要读取一个文件,遍历每一行并找到字符串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;

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

boo far ERROR

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

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

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