-1

我想检查我的木偶文件(.pp)是否}以可选和换行符结尾。

我只关心退出代码。

任何想法如何做到这一点?

4

5 回答 5

2

您可以使用标志。如果一行以 } 结尾或为空,则将其设置为 1。在文件结束后,检索最后一个标志集:

my $ok;
while (<>) {
    if (/}\s*$/) {
        $ok = 1;
    } else {
        undef $ok unless /^\s*$/;
    }
}
die unless $ok;
于 2012-10-09T11:09:42.053 回答
1
perl -ne 'unless(/^[\s]*$/){$x=$_;}if(eof){if($x=~m/\}[\s]*$/){print "match\n"}}' your_file

测试如下:

文件末尾有一些空换行符,其中一个空换行符也有空格。

> cat temp2
this is key2
this is key1
this is key1
this is key1
this key2 kmkd
}    

执行:

> perl -ne 'unless(/^[\s]*$/){$x=$_;}if(eof){if($x=~m/\}[\s]*$/){print "match\n"}}' temp2
match
于 2012-10-09T11:10:55.740 回答
1
perl -ne 'undef$/;print"} at end\n"if$_=~/}\s*+$/' FILENAME
于 2012-10-09T12:00:58.503 回答
1

如果文件不是太大,你可以这样做:

{
    #Set input record separator to undefined; reads in everything as one line.
    local $/;
    #FILE is a filehandle you have already opened.
    print "Happy ending!" if (<FILE> =~ /}\n*$/s);  
}

此方法将整个文件读入单个字符串,从而可以轻松地使用正则表达式匹配您要查找的内容。

(这种方法很简单,但是如果你有一个大文件,choroba 的方法会更好,因为它不会将整个内容读入内存。)

于 2012-10-09T12:10:15.920 回答
1

该解决方案应该适合您。本质上,它保留一个标志,说明最后一个非空白行是否以大括号结尾,后跟可选空格。它期望输入文件作为命令行上的参数。

use strict;
use warnings;

my $valid = 0;

while (<>) {
  $valid = /\}\s*$/ if /\S/;
}

print $valid ? "File is OK\n" : "File is invalid\n";
于 2012-10-09T12:51:45.170 回答