好的,所以我需要读取一个文件,遍历每一行并找到字符串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的新手所以请尽量保持基本.谢谢!
这是一种更优雅的方法,我修复了正则表达式问题.^匹配一行的开头.
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)
这实际上是打印匹配行本身及其行号.