好的,所以我需要读取一个文件,遍历每一行并找到字符串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的新手所以请尽量保持基本。谢谢!
答案 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";
}
}