在Perl上搜索文件

use*_*061 2 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;
Run Code Online (Sandbox Code Playgroud)

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

嘘远误

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

kev*_*818 6

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

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

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

或者从命令行怎么样:

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

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

要输出到文件:

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

虽然这是使用Perl的一个很好/简单的例子,但是如果你使用的是Unix shell,grep会做你想要的而不需要脚本(感谢OP注释中的TLP):

grep -n ERROR input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

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