php -R '$count++' -E 'print "$count\n";' < somefile
将打印'somefile'中的行数(不是我实际上会这样做)。
我想在perl命令中模拟-E开关。
perl -ne '$count++' -???? 'print "$count\n"' somefile
有可能吗?
答案 0 :(得分:10)
TIMTOWTDI
您可以使用Eskimo Kiss运算符:
perl -nwE '}{ say $.' somefile
这个算子不像人们想象的那么神奇,如果我们去掉单行的话就会看到:
$ perl -MO=Deparse -nwE '}{say $.' somefile
BEGIN { $^W = 1; }
BEGIN {
$^H{'feature_unicode'} = q(1);
$^H{'feature_say'} = q(1);
$^H{'feature_state'} = q(1);
$^H{'feature_switch'} = q(1);
}
LINE: while (defined($_ = <ARGV>)) {
();
}
{
say $.;
}
-e syntax OK
它只是添加了一组额外的花括号,使得以下代码在隐式while循环之外结束。
或者您可以检查文件的结尾。
perl -nwE 'eof and say $.' somefile
对于多个文件,您将获得每个文件的累计总和。
perl -nwE 'eof and say $.' somefile somefile somefile
10
20
30
您可以关闭文件句柄以获取非累积计数:
perl -nwE 'if (eof) { say $.; close ARGV }' somefile somefile somefile
10
10
10
答案 1 :(得分:6)
这应该是你要找的东西:
perl -nle 'END { print $. }' notes.txt
答案 2 :(得分:6)
您可以使用END { ... }
块添加应在循环后执行的代码:
perl -ne '$count++; END { print "$count\n"; }' somefile
如果你想让它更加分离,你也可以轻松地将它放在自己的-e
参数中:
perl -ne '$count++;' -e 'END { print "$count\n"; }' somefile
另见: